【发布时间】:2021-10-09 18:56:32
【问题描述】:
在 Python3.4 中,是否可以从 io.BytesIO 流中打开 SQLite3 数据库?
类似于:
with open("temp.db", "rb") as openf:
byte_stream = io.BytesIO(openf.read())
sqlite3.connect(byte_stream)
简短的故事是:我有一个流 (byte_stream),是 sqlite 数据库文件。出于安全原因,我无法执行以下操作(无法创建未加密的文件):
with open("temp.db", "wb") as openf:
openf.write(byte_stream)
sqlite3.connect("temp.db")
是否有一些我找不到的用于 sqlite3 的低级 API?我假设sqlite3.connect 只是在某个时候调用open() 并将文件作为字节流打开。我只是想跳过 open() 步骤。
【问题讨论】:
-
你是怎么得到字节流的?
-
SQLite3 python 绑定使用 SQLite3 C 库,可能还有
sqlite3_open_v2函数,它接受文件名(或 VFS URL,但如果 Python 公开了该 API,那将是相当高级的和 IDK)。 -
@ColonelThirtyTwo 是正确的,如果没有检查实现,则实际上调用了
open()- 请参阅Modules/_sqlite/connection.c:102了解实际实现(在 C 中)。 -
是的,我正在查看 C 实现,试图看看是否有办法做到这一点。乍一看没有发现任何东西,但我希望其他人知道一些事情。至于 VFS URL,它是公开的,但没有真正记录在案。见docs.python.org/3.5/library/sqlite3.html#sqlite3.connect(我认为。)
标签: python python-3.x sqlite