簡體   English   中英

從 Python/SQLAlchemy 使用 SQLite 的備份 API

[英]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 一起工作,因為它們是一個非常有用的組合。

當我執行以下操作時

import sqlite3
dir(sqlite3)

我沒有看到任何備份 API方法。

因此,答案是否定的; 您無法從 sqlite3 模塊訪問 API。 似乎沒有人實施它。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM