This question already has answers here:
Moving back and forth between an on-disk database and a fast in-memory database?
(2个答案)
4年前关闭。
我需要做的是将一个sqlite3数据库从磁盘加载到内存中,使用它,并在脚本退出时将内存数据库保存到磁盘中。我将如何去做呢?谢谢!
如果您需要能够运行一系列命令并在不成功的情况下将它们全部回滚,则应使用transaction。
如果需要复制现有数据库,请对其进行更改,然后仅在更改成功后才将其保存在其他位置,然后可以执行以下操作之一:
创建一个内存数据库,然后使用SQLite的
复制现有数据库文件,尝试对其进行更改,如果操作失败,则删除新文件。
使用
(2个答案)
4年前关闭。
我需要做的是将一个sqlite3数据库从磁盘加载到内存中,使用它,并在脚本退出时将内存数据库保存到磁盘中。我将如何去做呢?谢谢!
最佳答案
您需要做的只是对数据库进行connect
-然后您可以对数据库进行任何操作。
from sqlite3 import connect
conn = connect("/path/to/your/sqlite.db")
# Do what you need to with the database here
# Changes (inserts, updates, etc) will be persisted
# to disk whenever you commit a transaction.
如果您需要能够运行一系列命令并在不成功的情况下将它们全部回滚,则应使用transaction。
如果需要复制现有数据库,请对其进行更改,然后仅在更改成功后才将其保存在其他位置,然后可以执行以下操作之一:
创建一个内存数据库,然后使用SQLite的
ATTATCH DATABASE
命令将现有数据库附加到新的内存数据库中。将所有数据从现有数据库复制到内存数据库中并进行转换后,您可以附加新数据库并再次复制所有内容。复制现有数据库文件,尝试对其进行更改,如果操作失败,则删除新文件。
使用
sqlite3
的Connection.iterdump
以SQL脚本的形式获取表的内容,然后可以将其以sqlite3.Cursor.executescript
的形式传递给this answer suggests(使用内存或磁盘连接字符串作为新字符串数据库)。