使用Python将从SQLite数据库中提取的BLOB数据插入到新数据库中

时间:2014-04-02 20:55:57

标签: python sql database sqlite

sqlite3.OperationalError:无法识别的令牌:“X'8e7q0300000000'”。

将数据插入SQLite数据库时出现上述错误。

在我写的Python脚本中,我试图从一个数据库中选择数据并将其插入到我正在创建的另一个数据库中。我插入的表格是数据来源的完全重复。

数据库中的一行是BLOB,当我从原始数据库中选择BLOB时,它以字符串形式显示,其值如下:

b'\x00\x00\x00\x00\x00\x00\x00\x00'
b'\xe8\xe1\x01\x01\x00\x00\x00\x00'
b'\x8e7q\x03\x00\x00\x00\x00'
b'\t\xc3 \x02\x00\x00\x00\x00'
b'\xe8\xe1\x01\x01\x00\x00\x00\x00'

我希望以可接受的格式X'e8e1010100000000'将其插入新数据库 我尝试过字符串替换,但数据不够一致,我不明白为什么十六进制范围内有非元素。以Q为例。似乎有些数据是在ASCI中提取的。

这是一张显示我的意思的图片:

enter image description here

有没有办法可以将我提取的数据插入新数据库? 很抱歉我的问题格式很奇怪。

以下是我的python代码,错误在第41行:

import sys
from os.path import basename
import sqlite3

if len(sys.argv) != 2:
    print()
    print("Usage:", basename(sys.argv[0]), "<Input Database>")
    print()
    sys.exit(1)

new_database = "LiveDataOnly-{0}".format(sys.argv[1])

# sqlite_master table query
sqlite_master_query = "SELECT tbl_name, sql FROM sqlite_master WHERE type = 'table' AND tbl_name != 'sqlite_sequence';"

# Get the create table statements from the original database
conn = sqlite3.connect(sys.argv[1])
cur = conn.cursor()
cur3 = conn.cursor()
cur.execute(sqlite_master_query)

# Create a new empty database
conn2 = sqlite3.connect(new_database)
cur2 = conn2.cursor()
cur4 = conn2.cursor()

for row in cur:
    table_name, create_table_statement = row

    # Create each table
    cur2.execute(create_table_statement)

    # Select all of the data from each table in the original database
    cur3.execute("SELECT * FROM {0};".format(table_name))

    # Insert all of the data into the new database
    for selected_row in cur3:
        statement = "INSERT INTO {0} VALUES {1};".format(table_name, selected_row).replace('None', 'Null').replace("b'\\", "X'\\").replace("\\x","")

        print(statement, "\n")
        cur4.execute(statement)

0 个答案:

没有答案