SQLite-Utils Python库使用指南:高效操作SQLite数据库
概述
SQLite-Utils是一个强大的Python库,它简化了SQLite数据库的操作流程,让开发者能够以更Pythonic的方式与SQLite数据库交互。本文将详细介绍该库的核心功能和使用方法。
快速入门
创建数据库和表
from sqlite_utils import Database
# 创建或连接数据库
db = Database("chickens.db")
# 创建表并插入数据
db.table("chickens").insert_all([
{"name": "Azi", "color": "blue"},
{"name": "Lila", "color": "blue"},
{"name": "Suna", "color": "gold"},
{"name": "Cardi", "color": "black"}
])
查询数据
# 遍历所有行
for row in db.table("chickens").rows:
print(row)
# 执行SQL查询
for row in db.query("""
select color, count(*)
from chickens group by color
order by count(*) desc
"""):
print(row)
数据库连接管理
多种连接方式
# 连接到现有数据库或创建新数据库
db = Database("my_database.db")
# 强制重建数据库
db = Database("my_database.db", recreate=True)
# 使用现有SQLite连接
import sqlite3
conn = sqlite3.connect("my_database.db")
db = Database(conn)
# 内存数据库
db = Database(memory=True)
# 命名内存数据库(支持多线程访问)
db = Database(memory_name="my_shared_database")
高级连接选项
# 禁用递归触发器
db = Database(memory=True, recursive_triggers=False)
# 禁用插件执行
db = Database(memory=True, execute_plugins=False)
# 启用STRICT模式
db = Database("my_database.db", strict=True)
数据库操作
附加数据库
db = Database("first.db")
db.attach("second", "second.db")
# 跨数据库查询
results = db.query("""
select * from table_in_first
union all
select * from second.table_in_second
""")
查询跟踪
def tracer(sql, params):
print(f"执行的SQL: {sql} - 参数: {params}")
# 全局跟踪
db = Database(memory=True, tracer=tracer)
# 局部跟踪
with db.tracer(print):
db.table("dogs").insert({"name": "Cleo"})
数据查询与操作
基本查询方法
# 返回字典迭代器
for row in db.query("select * from dogs"):
print(row)
# 执行更新操作
cursor = db.execute("update dogs set name = 'Cleopaws'")
print(cursor.rowcount) # 受影响的行数
参数化查询
# 位置参数
db.execute("update dogs set name = ?", ["Cleopaws"])
# 命名参数
dog = next(db.query(
"select rowid, name from dogs where name = :name",
{"name": "Cleopaws"}
))
表与视图操作
表访问
# 获取表对象
table = db.table("my_table")
# 字典式访问
table_or_view = db["my_table_or_view_name"]
视图操作
view = db.view("my_view") # 获取视图对象
列出数据库对象
# 列出所有表
print(db.table_names())
# 列出所有视图
print(db.view_names())
# 遍历表对象
for table in db.tables:
print(table)
数据检索
行操作
# 遍历所有行
for row in db.table("dogs").rows:
print(row)
# 条件查询
for row in db.table("dogs").rows_where("age > ?", [3]):
print(row)
# 自定义列和排序
for row in db.table("dogs").rows_where(
select='name, age',
order_by="age desc",
limit=1
):
print(row)
获取单条记录
# 通过主键获取
dog = db.table("dogs").get(1)
# 复合主键
db.table("compound_dogs").get(("mixed", 3))
# 处理记录不存在情况
from sqlite_utils.db import NotFoundError
try:
row = db.table("dogs").get(5)
except NotFoundError:
print("未找到记录")
表结构管理
查看表结构
print(db.schema)
创建表
# 通过插入数据自动创建表
dogs = db.table("dogs")
dogs.insert({
"id": 1,
"name": "Cleo",
"age": 3,
"is_good_dog": True,
}, pk="id")
# 显式创建表
db.table("cats").create({
"id": int,
"name": str,
"weight": float,
}, pk="id")
自定义列属性
# 控制列顺序
dogs.insert({
"id": 1,
"name": "Cleo",
"age": 3,
}, pk="id", column_order=("id", "name"))
# 指定列类型
dogs.insert({
"id": 1,
"name": "Cleo",
"age": "5", # 字符串
}, pk="id", columns={"age": int, "weight": float})
总结
SQLite-Utils库提供了简洁而强大的API,使得Python开发者能够轻松地操作SQLite数据库。从基本的CRUD操作到复杂的表结构管理,该库都提供了直观的方法。通过本文的介绍,您应该已经掌握了使用该库进行数据库开发的核心技能。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



