[英]Use SQLite's backup API from Python/SQLAlchemy
我正在使用來自 python 的 SQLite 數據庫(使用SQLAlchemy )。 出於性能原因,我想在應用程序中填充一個內存數據庫,然后將該數據庫備份到磁盤。
SQLite 有一個備份 API ,它似乎可以透明地做到這一點。
APSW文檔說它包裝了備份 API ,但我想從 Python 的標准 sqlite3 模塊或最好的情況下從 SQLAlchemy 訪問此功能。 這可能嗎?
APSW 方言也可以很容易地添加到 SQLAlchemy 中。 在 0.6 中很容易實現,它允許多種 DBAPI 適配器為正在使用的數據庫使用通用方言。
如果 pysqlite 和 apsw 鏈接到同一個 sqlite 庫,那么 pysqlite 可以接受 apsw 連接。 看:
http://docs.pysqlite.googlecode.com/hg/sqlite3.html#combining-apsw-and-pysqlite
我將嘗試使用這種(和其他)方法來讓 apsw 與 SQLAlchemy 一起工作,因為它們是一個非常有用的組合。
python-sqlite3-backup模塊聲稱可以解決這個問題。
現在是 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()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.