Python 数据库(SQLite)教程
HDUZN

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

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

选择SQLite的原因

自己的小东西,轻量极感觉用SQLite3也可以了,省得装MySQL这些了。然后再装个 DB Browser for SQLite的软件,开源的免费可视化工具,用来操作SQLite数据库文件溜溜的、贼方便了~

所以自己选择SQLite的2个主要原因是:

  1. Python内置了SQLite3,不需要再装任何东西;
  2. 有DB Browser for SQLite这样开源免费的软件工具,操作又方便,建库、建表、修改表之类都很方便,保存成一个.db文件也方便。

当然,这是看自己需求选择的原因。

数据库相关概念简介

一个数据库对应保存成一个 .db文件;
一个数据库里面可以有很多表(Table);

比如有一个学校的数据库,一般就会有:

  • 教职工表(里面有教师姓名之类的信息)
  • 班级表(里面有班级名称、人数等信息)
  • 全体学生表(里面有学生姓名、班级等信息)

关于数据库知识,随便搜几篇文章看一下,自己去了解一下SQL,这里就不介绍了。
数据库的使用,自己设计几个表,就懂了点基础了,平常自己用用够用就行了(表的设计靠实践)。

Python SQLite

一、SQLite使用过程描述

1.要操作关系数据库,首先要连接到数据库,一个数据库连接称为connection。

2.连接到数据库之后,需要打开游标(Cursor),通过Cursor执行SQL语句,然后获得执行的结果。

3.最后关闭数据库连接。

二、操作数据库举例

数据库的操作,概括一下主要就是【增 删 改 查】,这4个会了,基础就差不多可以上了。

  • 增:insert into 语句
  • 删:delete from 语句
  • 改:update 语句
  • 查:select 语句

1.创建数据库、表

创建一个test的表,表里面有 id、code、name 3个字段。

字段的类型 有:
INTEGER(int数值)、TEXT(string字符串)、REAL(float符点数),主要这3种。

字段的属性 有:

  • NOT NULL:非空,表示字段不能是空的;
  • PRIMARY KEY:主键;
  • AUTOINCREMENT:自动增加(这一项是自动增加的,一般用于id);
  • UNIQUE:唯一,表示在这个表里这个字段是唯一的。
  • DEFAULT ‘ ‘:表示默认值为 ‘ ‘
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import sqlite3
# 数据库文件是 test.db,如果文件不存在,会自动创建
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
sql = '''
    CREATE TABLE "test" (
    "id"    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    "code"  TEXT NOT NULL UNIQUE,
    "name"  TEXT DEFAULT ' '
    )
'''
cursor.execute(sql)
cursor.close()
conn.commit()
conn.close()

2.增:表中添加一条数据

sql语句中可以用参数的形式,execute执行sql的时候把参数传进去就可以了。

对应是Tuple(元组的数据类型),Python里List列表用的比较多,可以通过tuple()函数转成Tuple,当然,也可以直接定义成Tuple类型。

因为一般别的地方获取的数据List类型比较多,所以这里举例用了List。

添加一条的SQL语句是:

1
insert into test (code, name) values ('213123', '张三')

python代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import sqlite3
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
table_name = 'test'
sql = 'insert into ' + table_name + ' (code, name) values (?,?)'

# 添加一条数据
list1 = ['213123''张三']    
cursor.execute(sql, tuple(list1))
# 添加多条数据
list2 = [['213124''李四'], ['213125''王五']]
for one in list2:
    cursor.execute(sql, tuple(one))
# 添加多条数据2
list3 = [['213126''赵六'], ['213127''钱七']]
cursor.executemany(sql, list3)

cursor.close()
conn.commit()
conn.close()

sql的语句用参数的好处就是可以在for循环中直接使用,不用每一条固定一条sql语句。

3.删:删除一条指定数据

删除一条的SQL语句是 :

1
delete from test where code = '213123'

python代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
import sqlite3
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
table_name = 'test'

# 删除多条数据
code_list = ['213123''213124']
sql = 'delete from ' +  table_name + ' where code = ?'
for code in code_list:
    cursor.execute(sql, (code,))
cursor.close()
conn.commit()
conn.close()

4.改:修改一条记录

修改一条的SQL语句是:

1
update test set code = '213122' where name = '张三'

python代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
import sqlite3
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
table_name = 'test'

new_code = '213122'
name = '张三'
sql = 'update ' +  table_name + ' set code = ? where name = ?'
cursor.execute(sql, (new_code,name))
cursor.close()
conn.commit()
conn.close()

5.查:查询记录

查属于最常用的部分了,因为存储在数据库的数据,通常都用select语句去查询。

查询的SQL语句有:

1
2
3
4
select * from test
select * from test where code = '213124'
select * from test where code = '213124' and name = '李四'
select code,name from test where code = '213124'

查询可以查询全部字段,也可以查询部分需要的字段;
查询后面的where条件可以是 UNIQUE 字段,那查询结果就是唯一的,如果不是 UNIQUE字段,查询结果可能会有多条。

python代码示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import sqlite3
conn = sqlite3.connect('test.db')
cursor = conn.cursor()
table_name = 'test'

name = '张三'
sql1 = 'select * from ' + table_name + ' where name = ?'
cursor.execute(sql1, (name,))
values1 = cursor.fetchall()
print(values1) # [(1, '213122', '张三')]
sql2 = 'select code,name from ' + table_name
cursor.execute(sql2)
values2 = cursor.fetchall()
print(values2) # [('213122', '张三'), ('213124', '李四'), ('213125', '王五')]

cursor.close()
conn.close()

6.小结

使用Cursor对象执行insert,update,delete语句时,执行结果由rowcount返回影响的行数,就可以拿到执行结果。

使用Cursor对象执行select语句时,通过fetchall()可以拿到结果集。结果集是一个list,每个元素都是一个tuple,对应一行记录。

像上面查询中的第4条sql语句,查询结果只需要 code,name 两个字段,那查询的结果会是一个List,每一个元素是一个tuple元组。
比如查询到的结果是:

[(‘213124’, ‘李四’), (‘213125’, ‘王五’)]

对于这样的List,Python里可以直接转换成 Dictionary(字典)类型,那用起来就更方便了。

最后,记得用完 关闭connection和Cursor对象。

  • 本文标题:Python 数据库(SQLite)教程
  • 本文作者:HDUZN
  • 创建时间:2021-02-07 20:20:00
  • 本文链接:http://hduzn.cn/2021/02/07/Python-数据库(SQLite)教程/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论