You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将SQLite内存数据库附加到磁盘数据库?

解决SQLite内存数据库关联磁盘数据库的问题

嘿,我来帮你搞定这个问题!你之前用的ATTACH语句其实没指向磁盘数据库,而是创建了一个新的共享内存库,这就是为啥它不工作~

先理清楚核心问题:你现在有一个已经建好数据的内存数据库,想要和磁盘上的现有数据库关联起来,无非两种常见需求,我分别给你对应解决方案:

需求1:在当前内存库连接中操作磁盘数据库(附加磁盘库)

如果只是想在同一个连接里同时访问内存库和磁盘库,直接把ATTACH语句改成磁盘数据库的实际路径就行:

import sqlite3
# 你的内存库创建代码保持不变
c = sqlite3.connect(':memory:')
c.execute('CREATE TABLE my_table (id int, name text);')
c.execute("INSERT INTO my_table VALUES (1, 'bruce'), (2, 'wayne'), (3, 'bat');")
c.commit()

# 关键修改:用磁盘数据库的真实路径替换共享内存URI
# 比如你的磁盘数据库在当前目录叫mydisk.db,就这么写
c.execute("ATTACH DATABASE './mydisk.db' AS db_disk")

附加成功后,你可以通过db_disk.表名访问磁盘库的表,还能轻松把内存库的数据复制到磁盘库:

# 把内存库的my_table复制到磁盘库(磁盘库无此表时会自动创建)
c.execute("CREATE TABLE db_disk.my_table AS SELECT * FROM my_table")
c.commit()

需求2:把整个内存库完整备份到磁盘数据库

如果你的目标是把内存里的所有数据永久保存到磁盘,那用SQLite自带的backup方法更靠谱,不需要ATTACH:

import sqlite3
# 先创建并填充内存库
c = sqlite3.connect(':memory:')
c.execute('CREATE TABLE my_table (id int, name text);')
c.execute("INSERT INTO my_table VALUES (1, 'bruce'), (2, 'wayne'), (3, 'bat');")
c.commit()

# 创建磁盘数据库连接
disk_conn = sqlite3.connect('./mydisk.db')
# 一键备份内存库到磁盘
c.backup(disk_conn)
# 记得关闭连接释放资源
disk_conn.close()
c.close()

这样操作后,你的磁盘数据库就和内存库完全一致了,所有表和数据都会完整保留下来。

内容的提问来源于stack exchange,提问作者Houssem

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:27:33