从StringIO(Python)建立SQLite3连接

10

我想知道是否有方法能够从StringIO对象生成Python中的SQLite数据库连接。

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

我已经查看了sqlite3库源代码,但是似乎filename会完全传递到C代码中。是否有其他SQLite3连接库可以使用文件ID?或者是否有一些方法可以欺骗内置的sqlite3库认为我的StringIO(或其他对象类型)是一个实际的文件?


1
解压到 RAM 磁盘上,也许可以? - Jon Clements
这个有什么使用场景呢?是要加载一些已经存在的sqlite3格式的数据,对其进行处理,并在处理后丢弃任何更改吗? - Jon Clements
我只需要从一个压缩的数据库对象中获取几列数据。之后我将在Python对象中处理它。 - horriblyUnpythonic
如果没有临时文件,那么将sqlite3数据进行pickling,然后加载以进行处理如何?如果它被gzipped,则可能不是来自不断变化的数据源,因此一次性的pickling可能是可行的...(并且可能足够小,不需要压缩) - Jon Clements
嗯...所以还有其他东西在使用sqlite3,然后压缩它,你得到了那个?嗯... - Jon Clements
显示剩余3条评论
1个回答

4
Python的sqlite3模块无法从文件号打开数据库。即使使用StringIO,也不会给你一个文件号(因为它不会打开文件,只是模拟Python的file对象)。
您可以使用:memory:特殊文件名来避免将文件写入磁盘,然后在完成操作后将其写入磁盘。这也将确保文件大小优化,并且如果大小真的是一个大问题,可以选择不写入例如索引之类的内容。

4
没错,但当我使用sqlite3.connect(':memory:')时,它会初始化一个空的数据库。 - horriblyUnpythonic
你之后如何将它写入磁盘? - Greg
1
sqlitebck 模块可以实现这个功能,但是看起来 OP 更希望找到一种从几个表中提取数据的方法,这种情况下基本的 select+insert 可能更容易些。 - Krumelur

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接