使用 Python 的 sqlite3 模块,我可以在创建内存数据库后将其保存到磁盘吗?



sqlite3命令行工具允许我.save <file>内存中的数据库,而无需以字符串/脚本形式转储 SQL。

我想在不编写太多样板代码的情况下做类似的事情。但是,我并不总是想保存它,这就是为什么我想在实际需要它之前避免磁盘上的数据库。

有没有办法在 Python 中做到这一点,而不是以字符串形式转储 SQL 并将其导入磁盘文件(我知道该怎么做并且已经实现了)?

似乎没有单行解决方案。

备份 in-memory sqlite 数据库可以使用连接对象的 iterdump 方法完成。当然,这只是转储 sql 文本并导入它的一小部分。

import sqlite3
# set up a database in memory
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, 'BATMAN');")
c.commit()
# write database to disk
c2 = sqlite3.connect('mydb.db')
with c2:
  for line in c.iterdump():
    if line not in ('BEGIN;', 'COMMIT;'): # let python handle the transactions
      c2.execute(line)
c2.commit()

从 Python 3.7 开始,你可以使用 Connection.backup 方法:

db_mem = sqlite3.connect(':memory:')
# ...
db_disk = sqlite3.connect('result.db')
db_mem.backup(db_disk)

这是如何在Python sqlite3中将现有数据库文件加载到内存的反向操作?。

最新更新