从sqlite3数据库中提取表

时间:2017-04-18 16:29:19

标签: python python-3.x sqlite

我有一些大的(~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块,并忽略不起作用的行。

0 个答案:

没有答案