SQLite3—数据库的学习—python

SQLite3

一、简介。

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

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

 

二、SQL语言。

  学习SQLite之前,必须了解SQL语言,此处只简述本文遇到的几条 SQL语句。(SQL教程更详细请前往

  1、CREATE TABLE 语句用于创建数据库中的表。

CREATE TABLE 表名称(列名称1 数据类型,列名称2 数据类型,列名称3 数据类型,....)

  2、INSERT INTO 语句用于向表格中插入新的行。

INSERT INTO 表名称 VALUES (值1, 值2,....)

  3、查找。

  (1)基本查找——SELECT * FROM XX表——查询XX表的所有数据。

  (2)条件查找——SELECT * FROM XX表 WHERE 条件——按条件查询XX表。

  4、排列。

  SELECT * FROM XX表 ORDER BY 排序依据  。——按排列依据从低到高。

 

三、python—SQLite语句编写。

step1:访问和操作SQLite数据时,需要首先导入sqlite3模块,然后创建一个与数据库关联的Connection对象:

import sqlite3                           #导入模块
conn = sqlite3.connect('example.db')     #连接数据库
# 连接到SQLite数据库
# 数据库文件是example.db
# 如果文件不存在,会自动在当前目录创建:

———————————     >                                                                                                                                                           

sqlite3.Connection.execute() 执行SQL语句
 sqlite3.Connection.cursor() 返回游标对象
sqlite3.Connection.commit() 提交事务
sqlite3.Connection.rollback() 回滚事务
sqlite3.Connection.close() 关闭连接

 

———————————    >                                                                                                                                                               

step2:成功创建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()

 

step1和step2代码形成的example.db数据库如下:

 

 

 

 

>>>有关execute(sql[, parameters]):该方法用于执行一条SQL语句。(即上文的SQL语句)

  SQL语句传递参数有两种方法,分别使用 问号 和 命名变量 作为占位符。

# 使用问号作为占位符
cur.execute("INSERT INTO people VALUES (?, ?)", (who, age))
# 使用命名变量作为占位符
cur.execute("SELECT * FROM people WHERE name_last=:who AND age=:age", 
            {"who": who, "age": age})

 

 

~~~~~~                                                                                                                                                                                                       

Cursor对象常用方法:

close(...) 关闭游标 
 execute(...) 执行SQL语句
executemany(...) 重复执行多次SQL语句
 executescript(...)

一次执行多条SQL语句

fetchall(...) 从结果集中返回所有行记录
fetchmany(...)

从结果集中返回多行记录

fetchone(...) 从结果集中返回一行记录

~~~~~~                                                                                                                                                                                                       

 

在将数据写入数据库时,可先用 sqlite3.connect(":memory:") 连接":memory:"在内存中创建数据库,查询数据无误后,再正式写入数据库。

 

例:

import sqlite3
conn = sqlite3.connect(":memory:")
cur = conn.cursor()
cur.execute("CREATE TABLE people (name_last, age)")
who = "Dong"
age = 38
# 使用问号作为占位符
cur.execute("INSERT INTO people VALUES (?, ?)", (who, age))
# 使用命名变量作为占位符
cur.execute("SELECT * FROM people WHERE name_last=:who AND age=:age", 
            {"who": who, "age": age})
print(cur.fetchone())

运行结果如下:

  在正式写入时,记得要关闭连接,即.close()。

 

四、SQLite可视化工具——sqlitestudio(简介)。

  sqlitestudio是一款可以帮助用户管理sqlite数据库的工具,该sqlite数据库管理工具具有功能完善的sqlite2和sqlite3工具,视图编码支持utf8,还可以同时打开多个数据库文件,软件支持查看和编辑二进制字段。sqlitestudio软件支持的导出数据格式有csv、html、plain、sql、xml。

 

—————————————————————分割线——————————————————————

利用SQLite完成任务

任务一:将上次爬到的2019中国大学排名的csv文件存入以自己学号命名的数据库中。

任务二:查找广东技术师范大学排名。

任务三:查询并显示,广东省的学校的排名和得分(按照  "科技服务(企业科研经费·千元)"  排名规则,)

 

任务一代码实现:

首先要对读取到的csv文件数据进行处理,使其可以存入数据库。

f = open("D:\\桌面\\pytest\\2019中国大学排名.csv", 'r', encoding='utf-8')        # 按行读取文件
data = []
for line in f.readlines():
    line = line.replace('\n', '')
    line = line.split(',')                          # 将字符串按照 ',' 分割为列表
    for i in range(len(line)):
        try:                                          # 使用 异常处理 避开 出现中文无法转换 的错误
            if line[i] == '':             # 数据中存在空值,处理为0
                line[i] = '0'
            line[i] = eval(line[i])    # 将数字 字符串形式 转换为数值,为了能在数据库储存
        except:
            continue
    data.append(tuple(line))

处理后就可以写入数据库:

(完整代码)

 1 f = open("D:\\桌面\\pytest\\2019中国大学排名.csv", 'r', encoding='utf-8')        # 按行读取文件
 2 data = []
 3 for line in f.readlines():
 4     line = line.replace('\n', '')                 
 5     line = line.split(',')                                # 将字符串按照 ',' 分割为列表
 6     for i in range(len(line)):
 7         try:                                          # 使用 异常处理 避开 出现中文无法转换 的错误
 8             if line[i] == '':             # 数据中存在空值,处理为0
 9                 line[i] = '0'
10             line[i] = eval(line[i])    # 将数字 字符串形式 转换为数值,为了能在数据库储存
11         except:
12             continue
13     data.append(tuple(line))
14 
15 
16 
17 
18 import sqlite3                           #导入模块
19 conn = sqlite3.connect('D:\\桌面\\pytest\\FZY2019310143110.db')     #连接数据库
20 c = conn.cursor()
21 headline = ("排名", "学校名称", "省市", "总分", "生涯质量", "培养结果(%)",\
22      "社会声誉", "科研规模","科研质量", "顶尖成果", "顶尖人才", "科技服务", "成果转化","学生国际化(留学生比例)")
23 c.execute('''CREATE TABLE college {}'''.format(headline))
24 for i in range(1,len(data)):
25     c.execute("INSERT INTO college VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)",data[i])
26 conn.commit()                 # 提交当前事务,保存数据
27 conn.close()             # 关闭数据库连接

 

用sqlitestudio呈现结果如下:

 

 

 

 

 

 

(可以看到表中的数据没有单位,这是小编在第21行设置headline时,偷懒的结果,只要将单位补上即可)

 

任务二代码实现:(使用SQL查找语句即可)

1 import sqlite3                           #导入模块
2 conn = sqlite3.connect('D:\\桌面\\pytest\\FZY2019310143110.db')     #连接数据库
3 c = conn.cursor()
4 for row in c.execute("SELECT * FROM college WHERE 学校名称 = '广东技术师范大学'"):
5     print(row)
6 
7 conn.close()             # 关闭数据库连接 

 

结果:

 

任务三代码实现:(使用SQL排序语句即可)

1 import sqlite3                           #导入模块
2 conn = sqlite3.connect('D:\\桌面\\pytest\\FZY2019310143110.db')     #连接数据库
3 c = conn.cursor()
4 
5 for row in c.execute("SELECT 学校名称,科技服务 FROM college WHERE 省市 = '广东' ORDER BY 科技服务"):
6     print(row)
7 
8 conn.close()             # 关闭数据库连接 

结果如下(从低到高):

右边数据为科技服务(企业科研经费·千元)

 

 

 

posted @ 2020-05-31 15:01  玩的三立方  阅读(596)  评论(0编辑  收藏  举报