目录
1. 概述
SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。
它是一个零配置的数据库,这意味着与其他数据库不一样,您不需要在系统中配置。
就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。
2. 引入SQLite
import sqlite3
3. 连接数据库创建游标
conn = sqlite3.connect("mrsoft.db") # 连接数据库
cursor = conn.cursor() # 创建游标
4. 创建数据库文件
sql = "create table user(id int(10) primary key, name varchar(20))"
cursor.execute(sql)
5. 新增单条数据
sql = "insert into user(id, name) values(1, '张三')"
cursor.execute(sql)
conn.commit()
6. 批量新增数据
datas = [(2, "李四"), (3, "王五")]
# 在SQLite中占位符应该使用的是?而不是%
sql = "insert into user(id, name) values(?, ?)"
cursor.executemany(sql, datas)
conn.commit()
7. 查询单条数据
sql = "select * from user where id=?"
# 传参时需要使用元组,不要忘记后面的逗号
cursor.execute(sql, (1,))
cursor.fetchone() # 返回元组 (1, '张三')
8.查询全部数据
sql = "select * from user"
cursor.execute(sql)
cursor.fetchall() # 返回列表嵌套元组 [(1, '张三1'), (2, '李四'), (3, '王五')]
9. 查询指定条数的数据
sql = "select * from user"
cursor.execute(sql)
cursor.fetchmany(size=2) # 返回列表嵌套元组,size默认是1 [(1, '张三'), (2, '李四')]
10. 修改数据
sql = "update user set name=? where id=?"
cursor.execute(sql, ("张三1", 1))
conn.commit()
11. 删除数据
sql = "delete from user where id=?"
cursor.execute(sql, (3,))
12. 事务回滚
要么都执行,要么都不执行,保证数据的完整性.
注意:如果是commit提交之后的数据,在使用rollback回滚则无效,所以rollback发生在commit之前.
try:
sql = "insert into user(id, name) values(1, '张三')"
cursor.execute(sql)
sql = "update user set name123=? where id=?"
cursor.execute(sql, ("张三1", 1))
except Exception as e:
print(e)
conn.rollback()
13. 关闭数据库关闭游标
注意:这里需要先关闭游标,在关闭数据库
cursor.close()
conn.close()