如何在Python中将字符串插入BLOB列

时间:2016-01-04 13:06:29

标签: python string sqlite blob

我正在尝试使用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列中。 有谁知道这是什么问题?

1 个答案:

答案 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 (?)'