【问题标题】:How to insert string into the BLOB column in Python如何在 Python 中将字符串插入到 BLOB 列中
【发布时间】:2016-04-08 02:37:47
【问题描述】:

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

【问题讨论】:

  • 你想要一个字符串还是一个blob?
  • 我想将一个字符串插入到一个blob中
  • 字符串不是 blob。你想要一个字符串值还是一个 blob 值?此列中的值的用途是什么?
  • 我想将我的字符串转换为二进制数据,这样我就可以将它插入到 blob 列中
  • 可以将字符串直接插入到blob列中。

标签: python string sqlite blob


【解决方案1】:

首先,execute() 的语法错误:

c.execute(sql_statement, [sqlite3.Binary(ablob)])

正确的语法是:

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

【讨论】:

  • 当我使用 SqliteBrowser 工具打开数据库时,我看到它没有保存在 blob 列中。
  • execute() 适用于列表而不是元组。
  • @shonlev123 我想我把execute() 函数弄混了。您可以尝试其他东西而不是 SqliteBrowser 吗?如果您打开一个终端并转到您的数据库并使用sqlite3 database.db 打开它,然后是您的SELECT 语句?您使用的是哪个 Python 和 SQLite 版本?
猜你喜欢
  • 2017-06-13
  • 2014-06-07
  • 2015-09-13
  • 2021-11-15
  • 1970-01-01
  • 1970-01-01
  • 2019-12-18
  • 2023-01-16
相关资源
最近更新 更多