如何将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
相关产品推荐
相关产品推荐

