python保存在内存sqlite中

Sha*_*sal 12 python sqlite

是否可以将我的内存中的sqlite数据库保存到硬盘?如果可能的话,一些python代码会很棒.

提前致谢.

编辑:

我使用apsw完成了这项任务.它就像一个魅力.谢谢你的贡献.

Rog*_*nns 10

(披露:我是APSW的作者)

制作数据库二进制副本的唯一安全方法是使用属于SQLite的备份API,并由APSW公开.这对订购,锁定和并发做了正确的事情.

要创建数据库的SQL(文本)副本,请使用APSW shell,其中包含非常完整的.dump实现.您可以使用cursor.execute()将SQL转回数据库.

在最近的平台上,由于操作系统维护文件系统缓存,因此您不太可能看到内存数据库和磁盘数据库之间存在很大差异(假设您关闭了磁盘的日志记录).像Windows XP这样的老式操作系统确实有一个默认配置,只要使用10MB内存用于文件缓存,无论你有多少内存.


Vij*_*ran 8

有一种方法可以不使用 apsw 来备份内存数据库。backup() 是一种在磁盘上保存内存数据库副本的非阻塞方式。使用 conn.backup(dest) 如下所示:

import sqlite3

conn = sqlite3.connect('file:existing_db.db?mode=memory',detect_types=sqlite3.PARSE_DECLTYPES,uri=True)
bckup = sqlite3.connect('file:backup.db',detect_types=sqlite3.PARSE_DECLTYPES,uri=True)
with bckup:
    conn.backup(bckup)
bckup.close()
conn.close()

Run Code Online (Sandbox Code Playgroud)


Aar*_*lla 7

是.创建与数据库的连接时,请替换:memory:为要保存数据库的路径.

sqlite使用基于文件的DB的缓存,所以这不应该(更慢).


mat*_*mc3 7

根据sqlite3 python 文档,您可以使用该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)
Run Code Online (Sandbox Code Playgroud)


ili*_*dis 6

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
Run Code Online (Sandbox Code Playgroud)


Jak*_*yer 1

打开基于磁盘的数据库,然后将所有内容从一个数据库复制到另一个数据库。