我有一些大的(~500MB).db3文件,其中包含我想要提取的表,执行一些检查并写入.csv文件。以下代码显示了如何根据filepath
打开.db3文件,从MY_TABLE
中选择数据并返回output
列表:
import sqlite3
def extract_db3_table(filepath):
output = []
with sqlite3.connect(filepath) as connection:
cursor = connection.cursor()
connection.text_factory = bytes
cursor.execute('''SELECT * FROM MY_TABLE''')
for row_index, row in enumerate(cursor):
output.append(row)
return output
但是,在游标的最后一次迭代中会发生以下错误:
File "C:/Users/.../Documents/Python/extract_test.py", line 10, in extract_db3_table
for row_index, row in enumerate(cursor):
DatabaseError: database disk image is malformed
代码运行每次迭代直到最后一次,抛出此错误。我尝试过不同的.db3文件,但问题仍然存在。如果我在上面的示例中使用cursor.fetchall()
方法而不是游标for循环,也会抛出相同的错误。
我是否必须以某种方式在循环中使用try...catch
块并且在抛出此错误时使用break
循环或是否有另一种方法来解决此问题?非常感谢任何见解!
我使用bytes
作为connection.text_factory
的原因是因为我的表中的某些TEXT
值无法转换为str
,因此在我的完整代码中在将try...catch
值解码为UTF-8时使用TEXT
块,并忽略不起作用的行。