使用Python / SQLAlchemy中的SQLite备份API

时间:2009-07-02 04:12:52

标签: python sqlite sqlalchemy

我正在使用python的SQLite数据库(SQLAlchemy)。出于性能原因,我想在应用程序中填充内存数据库,然后将该数据库备份到磁盘。

SQLite有一个backup API,似乎可以透明地执行此操作。

APSW文档说它wraps the backup API,但我想从Python的标准sqlite3模块访问此功能,或者最好从SQLAlchemy访问。这可能吗?

5 个答案:

答案 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)

当我执行以下操作时

import sqlite3
dir(sqlite3)

我没有看到backup API方法。

因此,答案是否定的;您无法从sqlite3模块访问API。似乎没有人实现它。

答案 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()