使用来自Python/SQLAlchemy的SQLite备份API

gt0wga4j  于 2022-12-27  发布在  SQLite
关注(0)|答案(5)|浏览(207)

我使用的是python的SQLite数据库(带SQLAlchemy),出于性能原因,我希望在应用程序中填充内存中的数据库,然后将该数据库备份到磁盘。
SQLite有一个backup API,它似乎可以透明地执行此操作。
APSW文档说它是wraps the backup API,但是我想从Python的标准sqlite3模块访问这个功能,或者在最好的情况下从SQLAlchemy访问。

2lpgd968

2lpgd9681#

APSW方言也可以很容易地添加到SQLAlchemy中。2在0.6中实现起来非常容易,它允许多种DBAPI适配器对正在使用的数据库使用同一种方言。

ldioqlga

ldioqlga2#

如果pysqlite和apsw链接到同一个sqlite库,则pysqlite可以接受apsw连接。
http://docs.pysqlite.googlecode.com/hg/sqlite3.html#combining-apsw-and-pysqlite
我将尝试使用这种(以及其他)方法来让apsw与SQLAlchemy一起工作,因为它们是非常有用的组合。

zzwlnbp8

zzwlnbp83#

现在是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()
dm7nw8vv

dm7nw8vv4#

python-sqlite3-backup模块声称可以解决这个问题。

1l5u6lss

1l5u6lss5#

执行以下操作时

import sqlite3
dir(sqlite3)

我没有看到任何backup API方法。
因此,答案是否定的;无法从sqlite3模块访问API。似乎没有人实现它。

相关问题