我正在尝试使用Python中的sqlite3将字符串插入BLOB列。我看到一些使用二进制文件的例子,但我试图在没有文件的情况下这样做。这是我的代码 -
import sqlite3
c = sqlite3.connect(path_to_db)
# my string
ablob = 'Hello world!'
sql_statement = 'INSERT into table VALUES (?)'
c.execute(sql_statement, [sqlite3.Binary(ablob)])
c.commit()
c.close()
执行后,会添加带有字符串的新列,但不会添加到blob列中。 有谁知道这是什么问题?
答案 0 :(得分:0)
首先,execute()
的语法错误:
c.execute(sql_statement, [sqlite3.Binary(ablob)])
sqlite3.Binary(ablob)
到execute()
的tupl中提供一个元素,则应添加一个逗号以识别为元组。查看JLS 正确的语法是:
c.execute(sql_statement, (sqlite3.Binary(ablob),))
我测试了以下代码:
import sqlite3
c = sqlite3.connect(path_to_db)
# my string
ablob = 'Hello world!'
sql_statement = 'INSERT into table VALUES (?)'
c.execute(sql_statement, (sqlite3.Binary(ablob),))
c.commit()
c.close()
return 0
它对我有用。我用命令
创建了表CREATE TABLE table (blob BLOB);
并且在执行脚本之后,该表中有一个条目:
sqlite> SELECT * from table;
Hello world!
最后,为什么要使用sql_statement = '''INSERT into table VALUES (?)'''
?我分别删除了两个撇号,脚本也按预期工作:
sql_statement = 'INSERT into tab VALUES (?)'