我正在使用python的SQLite数据库(SQLAlchemy)。出于性能原因,我想在应用程序中填充内存数据库,然后将该数据库备份到磁盘。
SQLite有一个backup API,似乎可以透明地执行此操作。
APSW文档说它wraps the backup API,但我想从Python的标准sqlite3模块访问此功能,或者最好从SQLAlchemy访问。这可能吗?
答案 0 :(得分:3)
APSW方言也可以很容易地添加到SQLAlchemy中。在0.6中实现它很容易,它允许多种DBAPI适配器使用正在使用的数据库的公共方言。
答案 1 :(得分:3)
如果pysqlite和apsw链接到同一个sqlite库,那么pysqlite可以接受apsw连接。参见:
http://docs.pysqlite.googlecode.com/hg/sqlite3.html#combining-apsw-and-pysqlite
我将尝试使用这种(和其他)方法来使用apsw与SQLAlchemy一起使用,因为它们是非常有用的组合。
答案 2 :(得分:1)
答案 3 :(得分:1)
python-sqlite3-backup模块声称可以解决此问题。
答案 4 :(得分:1)
现在是 2021 年,内存和磁盘之间的性能差异发生了变化。我的游戏笔记本可以执行 SQL 操作,主要是 INSERT,内存比磁盘快 100 倍。我正在使用原始连接进行备份(将内存数据库复制到磁盘)。
# create in-memory database. get raw_connection.
engine_memory = sqlalchemy.create_engine('sqlite://')
raw_connection_memory = engine_memory.raw_connection()
# do something to in-memory db
raw_cursor_memory.executescript(my_sql_script)
# save memory db to disk file.
engine_file = sqlalchemy.create_engine('sqlite:///myfile.sqlite')
raw_connection_file = engine_file.raw_connection()
raw_connection_memory.backup(raw_connection_file.connection)
raw_connection_file.close()
engine_file.dispose()