2024-04-27 05:33:41 发布
网友
是否可以将内存中的sqlite数据库保存到硬盘? 如果可能的话,一些python代码将是非常棒的。
提前谢谢。
编辑:
我通过使用apsw成功地完成了这项任务。它就像一个符咒。谢谢你的贡献。
(披露:我是APSW作者)
制作数据库二进制副本的唯一安全方法是使用备份API,它是SQLite的一部分,由APSW公开。这对排序、锁定和并发都是正确的。
若要制作数据库的SQL(文本)副本,请使用APSWshell,它包含一个非常完整的.dump实现。可以使用cursor.execute()将SQL转换回数据库。
在最近的平台上,当操作系统维护一个文件系统缓存时,您不太可能看到内存数据库和磁盘数据库(假设您关闭了磁盘的日志记录)之间的很大区别。像Windows XP这样的旧操作系统的默认配置是,不管有多少RAM,文件缓存都只使用10MB的内存。
根据sqlite3 python documentation,您可以使用^{}方法对内存中的数据库进行.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)
是的。创建到数据库的连接时,请将:memory:替换为要保存数据库的路径。
:memory:
sqlite对基于文件的DBs使用缓存,因此速度不应该太慢。
(披露:我是APSW作者)
制作数据库二进制副本的唯一安全方法是使用备份API,它是SQLite的一部分,由APSW公开。这对排序、锁定和并发都是正确的。
若要制作数据库的SQL(文本)副本,请使用APSWshell,它包含一个非常完整的.dump实现。可以使用cursor.execute()将SQL转换回数据库。
在最近的平台上,当操作系统维护一个文件系统缓存时,您不太可能看到内存数据库和磁盘数据库(假设您关闭了磁盘的日志记录)之间的很大区别。像Windows XP这样的旧操作系统的默认配置是,不管有多少RAM,文件缓存都只使用10MB的内存。
根据sqlite3 python documentation,您可以使用^{} 方法对内存中的数据库进行.sql文件转储,然后将该.sql文件应用于新的sqlite文件数据库就很简单了。
是的。创建到数据库的连接时,请将
:memory:
替换为要保存数据库的路径。sqlite对基于文件的DBs使用缓存,因此速度不应该太慢。
相关问题 更多 >
编程相关推荐