zoukankan      html  css  js  c++  java
  • 数据库实践

    一、数据库读书笔记

    SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,iOS和Android的App中都可以集成。

    注:Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用,需要导入sqlite3库。

    1.数据库的连接

    import sqlite3 #导入模块

    conn = sqlite3.connect('example.db') #连接数据库

    # 连接到SQLite数据库

    # 数据库文件是example.db

    # 如果文件不存在,会自动在当前目录创建:

     

    2.创建游标对象和表

    成功创建Connection对象以后,再创建一个Cursor对象,并且调用Cursor对象的execute()方法来执行SQL语句创建数据表以及查询、插入、修改或删除数据库中的数据:

    c = conn.cursor()

     

    c.execute('''CREATE TABLE stocks (date text, trans text, symbol text, qty real, price real)''') # 创建表

    c.execute("INSERT INTO stocks VALUES ('2006-01-05','BUY', 'RHAT', 100, 35.14)") # 插入一条记录

     

    conn.commit()# 提交当前事务,保存数据

     

    conn.close()# 关闭数据库连接

     

     

    3.查询表中内容

    select操作

    下面的 Python 程序显示了如何从前面创建的 COMPANY 表中获取并显示记录:

    #!/usr/bin/python

     

    import sqlite3

     

    conn = sqlite3.connect('test.db')

    c = conn.cursor()

    print "Opened database successfully";

     

    cursor = c.execute("SELECT id, name, address, salary from COMPANY")

    for row in cursor:

    print "ID = ", row[0]

    print "NAME = ", row[1]

    print "ADDRESS = ", row[2]

    print "SALARY = ", row[3], " "

     

    print "Operation done successfully";

    conn.close()

    上述程序执行时,它会产生以下结果:

    Opened database successfully

    ID = 1

    NAME = Paul

    ADDRESS = California

    SALARY = 20000.0

     

    ID = 2

    NAME = Allen

    ADDRESS = Texas

    SALARY = 15000.0

     

    ID = 3

    NAME = Teddy

    ADDRESS = Norway

    SALARY = 20000.0

     

    ID = 4

    NAME = Mark

    ADDRESS = Rich-Mond

    SALARY = 65000.0

     

    Operation done successfully

     

    二、爬取中国大学网

    基本代码

    import requests

    from bs4 import BeautifulSoup

    import bs4

     

     

    def getHTMLText(url):

    try:

    r=requests.get(url,timeout=30)

    r.raise_for_status()

    r.encoding='utf-8'

    return r.text

    except:

    return ""

     

    def fillUnivList(allUniv,soup):

    data=soup.find('tbody').children

    for tr in data:

    if isinstance(tr,bs4.element.Tag):

    ltd=tr('td')

    allUniv.append([ltd[0].string,ltd[1].string,ltd[2].string,ltd[3].string,ltd[4].string])

     

    def printUnivList(allUniv,num):

    print("{1:^2} {2:{0}^10} {3:{0}^6} {4:{0}^4} {5:{0}^10}".format(chr(12288),"排名","学校名称","省份","总分","生涯质量"))

    for i in range(num):

    u=allUniv[i]

    print("{1:^4} {2:{0}^10} {3:{0}^5} {4:{0}^8.1f} {5:{0}^10}".format(chr(12288),u[0],u[1],u[2],eval(u[3]),u[4]))

     

    def main(num):

    allo=[]

    url='http://www.zuihaodaxue.com/zuihaodaxuepaiming2018.html'

    html=getHTMLText(url)

    soup=BeautifulSoup(html,"html.parser")

    fillUnivList(allo,soup)

    printUnivList(allo,num)

    main(10)

    结果如下图

     

    保存为csv文件

    import requests

    from bs4 import BeautifulSoup

    import bs4

    import pandas as pd

    def getHTMLText(url):

    try:

    r=requests.get(url,timeout=30)

    r.raise_for_status()

    r.encoding='utf-8'

    return r.text

    except:

    return ""

     

    def fillUnivList(allUniv,soup):

    data=soup.find('tbody').children

    for tr in data:

    if isinstance(tr,bs4.element.Tag):

    ltd=tr('td')

    allUniv.append([ltd[0].string,ltd[1].string,ltd[2].string,ltd[3].string,ltd[4].string])

     

    def printUnivList(allUniv,num):

    print("{1:^2} {2:{0}^10} {3:{0}^6} {4:{0}^4} {5:{0}^10}".format(chr(12288),"排名","学校名称","省份","总分","生涯质量"))

    one=[]

    for i in range(num):

    u=allUniv[i]

    one.append(u)

    print("{1:^4} {2:{0}^10} {3:{0}^5} {4:{0}^8.1f} {5:{0}^10}".format(chr(12288),u[0],u[1],u[2],eval(u[3]),u[4]))

    return one

     

    def save(u): #存为csv文件

    name=["排名","学校名称","省份","总分","生涯质量"]

    li=[u[0],u[1],u[2],u[3],u[4],u[5],u[6],u[7],u[8],u[9]]

    test=pd.DataFrame(columns=name,data=li)

    test.to_csv('D:/pan.csv',encoding="gbk")

     

    def main(num):

    allo=[]

    url='http://www.zuihaodaxue.com/zuihaodaxuepaiming2018.html'

    html=getHTMLText(url)

    soup=BeautifulSoup(html,"html.parser")

    fillUnivList(allo,soup)

    k=printUnivList(allo,num)

    save(k)

    main(10)

     

    结果:

     

    三、将csv文件写入数据库

    代码

    import sqlite3

    import openpyxl

    lists=sqlite3.connect('panq.db')

    c=lists.cursor()

    c.execute('''CREATE TABLE q4an("序号","排名","学校名称","省市","总分","生源质量","培养结果","科研规模","科研质量","顶尖成果","顶尖人才","科技服务","产学研合作","成果转化","学生国际化"

    )''')

    listinsheet=openpyxl.load_workbook(r'D:/panqo.xlsx')

    datainlist=listinsheet.active #获取excel文件当前表格

    data_truck=('''INSERT INTO q4an("序号","排名","学校名称","省市","总分","生源质量","培养结果","科研规模","科研质量","顶尖成果","顶尖人才","科技服务","产学研合作","成果转化","学生国际化") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)''')

    for row in datainlist.iter_rows(min_row=2,max_col=15,max_row=datainlist.max_row):

    #使excel各行数据成为迭代器

    cargo=[cell.value for cell in row] #敲黑板!!使每行中单元格成为迭代器

    c.execute(data_truck,cargo) #敲黑板!写入一行数据到数据库中表rankf

    for row in c.execute('SELECT * FROM q4an ORDER BY "序号"'):

    print(row)

     

    lists.commit()

    lists.close()

     

    部分结果:

     

    四、查询某学校排名

    import sqlite3

    import openpyxl

    lists=sqlite3.connect('panq.db')

    c=lists.cursor()

    c.execute('''CREATE TABLE q4bn("序号","排名","学校名称","省市","总分","生源质量","培养结果","科研规模","科研质量","顶尖成果","顶尖人才","科技服务","产学研合作","成果转化","学生国际化"

    )''')

    listinsheet=openpyxl.load_workbook(r'D:/panqo.xlsx')

    datainlist=listinsheet.active #获取excel文件当前表格

    data_truck=('''INSERT INTO q4bn("序号","排名","学校名称","省市","总分","生源质量","培养结果","科研规模","科研质量","顶尖成果","顶尖人才","科技服务","产学研合作","成果转化","学生国际化") VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)''')

    for row in datainlist.iter_rows(min_row=2,max_col=15,max_row=datainlist.max_row):

    #使excel各行数据成为迭代器

    cargo=[cell.value for cell in row] #敲黑板!!使每行中单元格成为迭代器

    c.execute(data_truck,cargo) #敲黑板!写入一行数据到数据库中表rankh

    c.execute('SELECT * FROM q4bn WHERE "学校名称"="华南理工大学"')#由于我们学校没有上榜就查询了广州大学的排名

    r = c.fetchall()

    print(r)

    lists.commit()

    lists.close()

    结果

  • 相关阅读:
    Maven工程运行环境修改
    Maven中出现org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException错误
    IDEA创建maven_web工程后,右键包没有Servlet、Filter、Listener选项
    Spring中的依赖注入
    什么是JavaBean
    mybatis配置SqlMapConfig.xm时没有提示
    JDK1.8之后匿名内部类访问方法中的局部变量不用加final修饰
    架构、框架和设计模式
    CitrixSQL Server 2016高可用之SQL镜像 SQL Server mirror 带见证服务器
    CitrixPVS BDM启动模式创建虚机 BDM模式部署桌面(精华)
  • 原文地址:https://www.cnblogs.com/panqiaoyan/p/10948203.html
Copyright © 2011-2022 走看看