DeepAgent等Agent都采用了SQLite作为本地数据库来用,看来,是要对SQLite补补课啰。
SQLite(来源:网络)
SQLite 是一个零配置、无服务器、单文件存储的轻量级关系型数据库引擎。它不需要安装独立的服务进程,整个数据库就是一个磁盘文件(.db 或 .sqlite),非常适合嵌入式应用、本地数据存储、原型开发和中小型项目。
| 特性 | 说明 |
|---|---|
| 零配置 | 无需安装、启动服务或修改配置文件 |
| 单文件 | 整个数据库(表、索引、数据)存于一个文件中 |
| 跨平台 | 支持 Windows、macOS、Linux、Android、iOS 等 |
| 嵌入式 | 直接嵌入到应用程序中(如 Python 内置支持) |
| 事务安全 | 支持 ACID,通过 WAL 模式提升并发性能 |
| 轻量 | 库文件仅几百 KB,资源占用极低 |
Python 标准库自带 sqlite3 模块,无需额外安装。
import sqlite3
# 连接数据库(不存在则自动创建)
conn = sqlite3.connect('demo.db')
cursor = conn.cursor()
# 创建用户表
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
age INTEGER,
email TEXT UNIQUE
)
''')
conn.commit()
# 单条插入
cursor.execute("INSERT INTO users (name, age, email) VALUES (?, ?, ?)",
("张三", 25, "[email protected]"))
# 批量插入
users = [
("李四", 30, "[email protected]"),
("王五", 22, "[email protected]"),
]
cursor.executemany("INSERT INTO users (name, age, email) VALUES (?, ?, ?)", users)
conn.commit()
cursor.execute("SELECT * FROM users WHERE age > ?", (20,))
rows = cursor.fetchall()
for row in rows:
print(row) # (1, '张三', 25, '[email protected]')
cursor.close()
conn.close()
import sqlite3
from datetime import datetime
conn = sqlite3.connect('todo.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS todos (
id INTEGER PRIMARY KEY,
task TEXT,
created_at TEXT,
done INTEGER DEFAULT 0
)''')
# 添加任务
c.execute("INSERT INTO todos (task, created_at) VALUES (?, ?)",
("学习 SQLite", datetime.now().isoformat()))
conn.commit()
# 查看未完成任务
c.execute("SELECT * FROM todos WHERE done = 0")
print(c.fetchall())
conn.close()