【问题标题】:SQLite3 connection from StringIO (Python)来自 StringIO (Python) 的 SQLite3 连接
【发布时间】:2013-12-03 17:58:16
【问题描述】:

我想知道是否有人知道如何从 StringIO 对象生成与 Python 中的 SQLite 数据库的连接。

我有一个压缩的 SQLite3 数据库文件,我想使用 gzip 库对其进行解压缩,然后在不创建临时文件的情况下连接到它。

我查看了slqite3 库源代码,但看起来filename 一直传递到C 代码中。是否有任何其他 SQLite3 连接库可以使用文件 ID?或者有什么原因我可以欺骗内置的sqlite3 库认为我的 StringIO(或其他一些对象类型)是一个实际文件?

【问题讨论】:

  • 解压到内存盘吧?
  • 这个的用例是什么?加载一些已经以 sqlite3 格式存在的数据,对其进行一些处理,然后丢弃任何更改?
  • 我只需要从压缩的数据库对象中获取几列。之后我将在 python 对象中使用它。
  • 那么缺少一个临时文件,那么如何腌制 sqlite3 数据,然后加载它以使用它?如果它是 gzip 压缩的,那么它可能不是来自不断变化的数据源,因此一次性酸洗可能是可行的......(并且可能足够小以至于不需要压缩)
  • 我不确定我是否遵循。我不编写和压缩 sqlite 文件,我是从另一个应用程序中获取的。

标签: python sqlite stringio


【解决方案1】:

Python sqlite3 模块无法从文件号打开数据库,即使这样,使用 StringIO 也不会给你一个文件号(因为它不打开文件,它只是模拟 Python file 对象)。

您可以使用:memory: 特殊文件名来避免将文件写入磁盘,然后在完成后将其写入磁盘。这还将确保文件针对大小进行了优化,并且您可以选择不写入,例如如果大小确实是个大问题,则索引。

【讨论】:

  • 是的,但是当我使用sqlite3.connect(':memory:') 时,它会初始化一个空数据库。
  • 以后怎么写到磁盘上?
  • sqlitebck 模块可以做到这一点,但听起来 OP 更多的是在寻找一种从几个表中提取数据的方法,在这种情况下,基本的 select+insert 可能更容易。
猜你喜欢
  • 2011-04-18
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 2017-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
相关资源
最近更新 更多