SQLite是一种嵌入式数据库,它的数据库就是一个文件。其本身是由C语言编写,体积很小,经常集成在各种应用程序中,同样也非常适合数据库入门学习。默认Python 2.5以上版本中已经集成在标准库中,无需安装即可使用。

在学习和使用SQLite3之前,我们先明确几个概念,为了方便理解,这里用excel类比:

数据库:你可以将其看作一个Excel工作簿,一个数据库就是一个Excel文件;
表:表是数据库中存放关系数据的集合,你可以看作一个Excel工作表,也就是一个sheet,通常一个数据库中会有多个表;

增删改查,比如:

打开/创建数据库;
创建/删除/重命名表;
新增行/列;
删除行/列;
查询/修改字段内容;
...

  • SQLite3在python中是通过sqlite3模块驱动的,所以要使用SQLite3需要先导入该模块
# 导入sqlite3模块


  • 导入模块后首先要创建/链接数据库,然后创建游标对象
# 链接数据库,若数据库不存在则创建
con = sqlite3.connect("E:/Python3/123.db")

# 在内存中创建数据库
con = sqlite3.connect(":memory:")

# 创建游标对象
cur = con.cursor()


  • 通过游标对象对数据库表进行操作
# 新建表abc,包含id,name,age三列,sqlite可以省略类型,ID为主键(主键不能重复)并且不能为空,若已有该表则报错
cur.execute("CREATE TABLE abc(id TEXT PRIMARY KEY NOT NULL,name TEXT,age INT)")

# 新建表xyz,若已有该表则忽略,
cur.execute("CREATE TABLE IF NOT EXISTS xyz(id TEXT PRIMARY KEY NOT NULL,name TEXT,age INT)")

# 删除表xyz
cur.execute("DROP TABLE xyz")

# 修改已有表名称,abc>>mytable
cur.execute("ALTER TABLE abc RENAME TO mytable")


  • 通过游标对象对表内容进行操作
# 在已有表中添加列abc,字段类型为text,若已有该列则报错
cur.execute("ALTER TABLE mytable ADD abc TEXT")

# 修改已有列的列名称:看文档应该是这么写但一直报错,可能是python api 中 alter方法并不支持重命名列
# con.execute("ALTER TABLE mytable RENAME COLUMN abc TO sex")

# 在表mytable中插入一条记录,两种方法,一般用第二种方法,较为安全
cur.execute("INSERT INTO mytable (id,name) VALUES ('0','狗蛋')")
cur.execute("INSERT INTO mytable(id,name) VALUES(?,?)",("1","张三丰"))

# 在表mytable中插入一条记录,若存在即忽略
cur.execute("INSERT OR IGNORE INTO mytable (id,name) VALUES ('0','狗蛋')")

# 在表mytable中插入多条记录
info = [("2","张无忌"),("3","谢逊"),("4","令狐冲")]
cur.executemany("INSERT INTO mytable(id,name) VALUES(?,?)",info)

# 对 seq_of_parameters 中的所有参数或映射执行一个 SQL 命令。
# cur.executemany(sql, seq_of_parameters)

# 执行多个 SQL 语句。它首先执行 COMMIT 语句,然后执行作为参数传入的 SQL 脚本。所有的 SQL 语句应该用分号(;)分隔。
# cur.executescript(sql_script)

# 查询数据
cur.execute("SELECT id,name FROM mytable")
cur.execute("SELECT * FROM mytable")

# 获取查询结果集中所有(剩余)的行,返回一个列表
print(cur.fetchall())

# 修改记录,在id为3的记录中将该条记录的name字段内容修改为金毛狮王
cur.execute("UPDATE mytable SET name = ? where id = ?",("金毛狮王","3"))

# 修改一条记录多个字段,在id为3的记录中将该条记录的name字段内容修改为金毛狮王,age改为44
cur.execute("UPDATE mytable SET name = ?,age = ? where id = ?",("金毛狮王",44,"3"))

# 删除整条记录
n = cur.execute("delete from mytable where id=?",("1",)) #逗号不能省,元组元素只有一个的时候一定要加逗号
print("删除{num}行记录".format(num = n.rowcount))


  • 操作完成后保存及关闭数据库
# 事务提交,保存修改内容。
con.commit()

# 事务回滚,数据库回到上次提交保存的状态。
con.rollback()

# 数据库关闭,不自动提交保存。如果在关闭数据库连接之前没有调用 commit(),那么你的修改将会丢失!
con.close()


至此SQLite3在python中基本操作基本介绍完成了,更深入的操作可以访问官方文档自行研究。