的SQLite 需要數據庫文件存儲在磁盤上(它使用各種鎖和分頁技術)。內存中的文件是不夠的。
我會創建一個臨時目錄來保存數據庫文件,將其寫入該目錄,然後然後連接到它。該目錄還爲SQLite提供了寫入提交日誌的空間。
爲了處理這一切,上下文管理器可能會有所幫助:
import os.path
import shutil
import sqlite3
import sys
import tempfile
from contextlib import contextmanager
@contextmanager
def sqlite_database(inmemory_data):
path = tempfile.mkdtemp()
with open(os.path.join(path, 'sqlite.db'), 'wb') as dbfile:
dbfile.write(inmemory_data)
conn = None
try:
conn = sqlite3.connect(os.path.join(path, 'sqlite.db'))
yield conn
finally:
if conn is not None:
conn.close()
try:
shutil.rmtree(path)
except IOError:
sys.stderr.write('Failed to clean up temp dir {}'.format(path))
和使用,作爲:
with sqlite_database(yourdata) as connection:
# query the database
這在內存中的數據寫入到磁盤,打開一個連接,可以讓你使用該連接,之後清理。
爲什麼你有一個* remote * SQLite數據庫?這遠遠超出了嵌入的範圍。 – Makoto