目录:
SQLite 是一个轻量级、基于文件的关系型数据库,所有数据存储在一个文件中,具有跨平台、无需独立服务等优点。
sqlite3 模块是一个用于操作 SQLite 数据库的标准库,无需额外安装,适合嵌入式应用和小型项目的数据管理。
使用 sqlite3.connect() 方法可以连接到一个数据库文件。如果文件不存在,则会自动创建。
也可以连接内存数据库,程序退出后数据消失,但是速度会很快。
import sqlite3
# 连接到磁盘上的数据库(持久化)
conn = sqlite3.connect('example.db')
# 或者连接到内存数据库(临时使用,程序退出后数据消失)
# conn = sqlite3.connect(':memory:')
游标(Cursor)对象用于执行 SQL 语句并获取结果。
import sqlite3
conn = sqlite3.connect('example.db')
# 获取游标
cursor = conn.cursor()
通过游标的 execute() 方法执行 SQL 语句来创建表。建议使用 IF NOT EXISTS 避免重复创建。
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER
)
''')
conn.commit() # 提交事务,使创建生效
插入数据时,强烈建议使用参数化查询(占位符 ?),以防止 SQL 注入攻击。
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 插入单条数据
cursor.execute("INSERT INTO users (name, age) VALUES (?, ?)", ('Alice', 30))
# 批量插入数据
users = [('Bob', 25), ('Charlie', 35)]
cursor.executemany("INSERT INTO users (name, age) VALUES (?, ?)", users)
conn.commit() # 提交事务
查询数据可以使用 fetchall()、fetchone() 或 fetchmany() 方法获取结果。
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 查询所有记录
cursor.execute("SELECT * FROM users")
rows = cursor.fetchall()
for row in rows:
print(row) # 每行是一个元组,如 (1, 'Alice', 30)
# 条件查询
cursor.execute("SELECT * FROM users WHERE age > ?", (28,))
results = cursor.fetchall()
for row in results:
print(f"ID: {row[0]}, Name: {row[1]}, Age: {row[2]}")
# 查询单条记录
cursor.execute("SELECT * FROM users WHERE id = ?", (1,))
user = cursor.fetchone()
print(user) # 输出 (1, 'Alice', 30)
通过设置 row_factory,可以让查询结果以字典形式返回,更便于访问。
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
def dict_factory(cursor, row):
return {col[0]: row[idx] for idx, col in enumerate(cursor.description)}
conn.row_factory = dict_factory
cursor.execute("SELECT * FROM users WHERE id = 1")
print(cursor.fetchone()) # 输出:{'id': 1, 'name': 'Alice', 'age': 30}
使用 UPDATE 语句修改现有记录。
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
cursor.execute("UPDATE users SET age = ? WHERE name = ?", (31, 'Alice'))
conn.commit()
使用 DELETE 语句删除记录。
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
cursor.execute("DELETE FROM users WHERE id = ?", (2,))
conn.commit()
事务确保一组操作要么全部成功,要么全部失败。可以使用 try-except 块进行错误处理,并在出错时回滚。
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
try:
cursor.execute("INSERT INTO users (name, age) VALUES ('David', 28)")
cursor.execute("INSERT INTO users (name, age) VALUES ('Eve', 22)")
conn.commit() # 成功则提交
except sqlite3.Error as e:
print(f"操作失败: {e}")
conn.rollback() # 失败则回滚,撤销所有操作
操作完成后,应关闭游标和数据库连接以释放资源。
import sqlite3
conn = sqlite3.connect('example.db')
cursor = conn.cursor()
# 操作数据库...
cursor.close()
conn.close()
通过 with 语句可以自动管理连接,确保操作完成后自动提交或关闭。
with sqlite3.connect('example.db') as conn:
cursor = conn.cursor()
cursor.execute("INSERT INTO users (name, age) VALUES ('Frank', 40)")
# 无需显式调用 commit(),退出 with 块时自动提交
↶ 返回首页 ↶