SQList3—数据库的学习—python

Posted ShadowLand

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQList3—数据库的学习—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()             # 关闭数据库连接 

结果如下(从低到高):

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

 

 

 

以上是关于SQList3—数据库的学习—python的主要内容,如果未能解决你的问题,请参考以下文章

python 机器学习有用的代码片段

学习笔记:python3,代码片段(2017)

Python学习总结

30 段 Python 实用代码

学习 PyQt5。在我的代码片段中找不到错误 [关闭]

即学即用的 30 段 Python 实用代码