【问题标题】:Get sqlite3 database from disk, load it to memory, and save it to disk? [duplicate]从磁盘获取sqlite3数据库,加载到内存,保存到磁盘? [复制]
【发布时间】:2012-03-18 15:36:48
【问题描述】:

我需要做的是将一个 sqlite3 数据库从磁盘加载到内存中,使用它,当脚本退出时,将内存中的数据库保存到磁盘。我该怎么做呢?谢谢!

【问题讨论】:

标签: python sql sqlite memory


【解决方案1】:

您需要做的只是connect 到数据库 - 然后您可以用它做任何您想做的事情。

from sqlite3 import connect

conn = connect("/path/to/your/sqlite.db")
# Do what you need to with the database here
# Changes (inserts, updates, etc) will be persisted
# to disk whenever you commit a transaction.

如果您需要能够运行一系列命令并在其中一个不成功时将它们全部回滚,您应该使用transaction

如果您需要复制现有数据库,对其进行更改,然后将其保存在其他位置只有在更改成功时然后您可以执行以下操作之一:

  • 创建一个内存数据库,然后使用 SQLite 的ATTATCH DATABASE 命令将现有数据库附加到新的内存数据库。将现有数据库中的所有数据复制到内存数据库并对其进行转换后,您可以附加一个新数据库并重新复制所有内容。
  • 复制现有数据库文件,尝试对其进行更改,如果操作不成功,则删除新文件。
  • 使用sqlite3Connection.iterdump 将表的内容作为SQL 脚本获取,然后您可以将其作为this answer suggests 传递给sqlite3.Cursor.executescript(使用内存或磁盘连接字符串用于您的新数据库)。

【讨论】:

  • 但是每当我查询它时,它都会查询磁盘上的文件。我希望它在内存中运行(我听说它更快)。
  • @Fike - 除非您 知道 磁盘 IO 是(或将成为)您的瓶颈,否则您可能不需要进行此优化 - 但我给了您一些建议:-)
  • @Sean Vieira 虽然我同意你的观点,但从技术上讲,你并没有回答他的问题。对于那些正在寻找真正答案的人来说,这是一种方法,虽然我还没有测试过:stackoverflow.com/a/10856450/353094
猜你喜欢
  • 2010-11-29
  • 2018-08-03
  • 1970-01-01
  • 2012-03-24
  • 2022-01-19
  • 1970-01-01
  • 2019-07-22
  • 1970-01-01
相关资源
最近更新 更多