0

我有一个 bz2 文件(我从未使用过此类文件)。当我手动解压缩它时,我看到它是一个包含多个表的 sqlite 数据库,但我不知道如何从 python 连接到它而无需手动解压缩(我有很多数据库,所以它必须在剧本)。到目前为止,我已经尝试了以下方法,但出现错误。

import bz2
import sqlite3

zipfile = bz2.BZ2File("file.sqlite.bz2")
connection = sqlite3.connect(zipfile.read())

query = "SELECT * FROM sqlite_master WHERE type='table';"
cursor = connection.execute(query)
cursor.fetchall()
[]

但是,当我对解压缩文件执行相同的查询时,我确实得到了所有表。

4

1 回答 1

0

如果您可以使用apsw代替标准 python 库的 sqlite3 模块,则可以打开数据库的内存表示(如返回的字节BZ2File.read()

#!/usr/bin/env python3

import bz2
import apsw

zipfile = bz2.BZ2File("file.sqlite.bz2")

db = apsw.Connection(":memory:")
db.deserialize("main", zipfile.read())

query = "SELECT * FROM sqlite_master WHERE type='table';"
cursor = db.cursor()
for row in cursor.execute(query):
    print(row)

否则,由于标准绑定不支持 Sqlite3 的序列化功能,您必须将解压缩的数据库保存到临时文件,然后连接到该文件。

于 2021-09-02T08:53:33.503 回答