是否可以將我的內存中的sqlite數據庫保存到硬盤上? 如果可能的話,一些python代碼會很棒。python保存在內存中sqlite
在此先感謝。
編輯:
我用APSW成功這個任務。它像一個魅力。感謝您的貢獻。
是否可以將我的內存中的sqlite數據庫保存到硬盤上? 如果可能的話,一些python代碼會很棒。python保存在內存中sqlite
在此先感謝。
編輯:
我用APSW成功這個任務。它像一個魅力。感謝您的貢獻。
是的。在創建到數據庫的連接時,請將:memory:
替換爲要保存數據庫的路徑。
sqlite使用基於文件的數據庫的緩存,所以這應該不會太慢。
(披露:我是APSW作者)
比較安全的方法,使數據庫的二進制副本是使用備份API是SQLite的的一部分,由APSW曝光。這對於排序,鎖定和併發來說是正確的。
要製作數據庫的SQL(文本)副本,請使用包含非常完整的.dump實現的APSW外殼。您可以使用cursor.execute()將SQL轉換回數據庫。
在最近的平臺上,當操作系統維護一個文件系統緩存時,您不太可能在內存數據庫和磁盤之間看到很多差異(假設您爲磁盤啓用日記功能)。像Windows XP這樣的老式操作系統的默認配置只有10MB的內存用於文件緩存,不管你擁有多少內存。
每sqlite3 python documentation,您可以使用iterdump()
方法,讓您在內存數據庫的.sql文件轉儲,然後是微不足道的是.sql文件應用到新的SQLite數據庫文件。
# Convert file existing_db.db to SQL dump file dump.sql
import sqlite3, os
con = sqlite3.connect('existing_db.db')
with open('dump.sql', 'w') as f:
for line in con.iterdump():
f.write('%s\n' % line)
import apsw
memconn = apsw.Connection(":memory:")
memcursor = memconn.cursor()
memcursor.execute("create table foo(x,y,z)")
memcursor.execute("insert into foo values(?,?,?)", (1, 1.1, None))
thediskconn = apsw.Connection("adisk.db")
with thediskconn.backup("main", memconn, "main") as backup:
backup.step() # copy whole database in one go
memcursor.close()
memconn.close()
#continue with thediskconn
你的意思是在'創建DB:內存:',然後用它的工作,並將其保存到磁盤?這會給你什麼,而不是隻是在磁盤上創建它? – 2011-04-29 11:53:01
@Shansai:除了感謝,(1)接受答案(2)upvote它。 – 2011-05-08 02:08:42