我想在 Python 中查询从远程服务器(例如通过 HTTP)下载的 SQLite 数据库,而无需将其写入磁盘。
我看到你可以使用魔法名称
:memory:
https://docs.python.org/3/library/sqlite3.html在内存中启动一个空白的SQLite数据库。我发现您可以从磁盘支持的 SQLite 数据库复制到内存数据库,例如使用 iterdump。但是...我想用包含数据库的 :memory:
实例的内容填充 bytes
数据库,而无需将这些 bytes
写入磁盘。
我的理由:似乎没有必要将其全部保存在内存中,必须将其写入磁盘,然后将其读回内存,因此在我的过程中这是一个通用的“减少步骤数”。
它不支持查询,但您可以使用 https://github.com/uktrade/stream-sqlite 访问已下载/正在下载的 SQLite 文件的内容,而无需将其写入磁盘。
以自述文件中的示例为例:
from stream_sqlite import stream_sqlite
import httpx
def sqlite_bytes():
with httpx.stream('GET', 'http://www.parlgov.org/static/stable/2020/parlgov-stable.db') as r:
yield from r.iter_bytes(chunk_size=65_536)
for table_name, pragma_table_info, rows in stream_sqlite(sqlite_bytes(), max_buffer_size=1_048_576):
for row in rows:
print(row)
(全面披露:我大量参与了stream-sqlite的开发)