python – 在磁盘数据库和快速内存数据库之间来回移动?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python – 在磁盘数据库和快速内存数据库之间来回移动?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1446字,纯文字阅读大概需要3分钟。
内容图文
Python的sqlite3:memory:选项提供比等效的磁盘数据库更快的查询和更新.如何将基于磁盘的数据库加载到内存中,对其执行快速操作,然后将更新后的版本写回磁盘?
问题How to browse an in memory sqlite database in python似乎有关,但它侧重于如何在内存数据库中使用基于磁盘的浏览工具.问题How can I copy an in-memory SQLite database to another in-memory SQLite database in Python?也是相关的,但它是Django特有的.
我目前的解决方案是一次一个地读取所有表,从基于磁盘的数据库到元组列表,然后手动重新创建内存数据库的整个数据库模式,然后从中加载数据进入内存数据库的元组列表.在对数据进行操作之后,该过程相反.
一定会有更好的办法!
解决方法:
How to load existing db file to memory in Python sqlite3?的答案提供了重要的线索.基于该答案,这里是该代码的简化和概括.
它消除了消除不必要的StringIO使用,并打包成可重复使用的形式,用于读入和写入内存数据库.
import sqlite3
def copy_database(source_connection, dest_dbname=':memory:'):
'''Return a connection to a new copy of an existing database.
Raises an sqlite3.OperationalError if the destination already exists.
'''
script = ''.join(source_connection.iterdump())
dest_conn = sqlite3.connect(dest_dbname)
dest_conn.executescript(script)
return dest_conn
if __name__ == '__main__':
from contextlib import closing
with closing(sqlite3.connect('pepsearch.db')) as disk_db:
mem_db = copy_database(disk_db)
mem_db.execute('DELETE FROM documents WHERE uri="pep-3154"')
mem_db.commit()
copy_database(mem_db, 'changed.db').close()
内容总结
以上是互联网集市为您收集整理的python – 在磁盘数据库和快速内存数据库之间来回移动?全部内容,希望文章能够帮你解决python – 在磁盘数据库和快速内存数据库之间来回移动?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。