JSON插入错误,Sqlite3,Python

时间:2014-04-04 18:01:41

标签: python json sqlite

我正在尝试使用python中的sqlite3模块将原始JSON字符串插入到sqlite数据库中。

当我执行以下操作时:

rows = [["a", "<json value>"]....["n", "<json_value>"]]
cursor.executemany("""INSERT OR IGNORE INTO FEATURES(UID, JSON) VALUES(?, ?)""", rows)

我收到以下错误:

  

sqlite3.ProgrammingError:提供的绑定数量不正确。该   当前语句使用2,并且提供了48个。

如何将原始json插入表中?我假设它是json字符串中的逗号。

我怎样才能解决这个问题?

3 个答案:

答案 0 :(得分:0)

您的输入被解释为一个字符列表(这是“48 提供”的来源 - 48 是 <json value> 字符串的长度)。

如果像这样用方括号括起来,您将能够将输入作为字符串传入

["<json value>"]

整行看起来像

rows = [["a", ["<json value>"]]....["n", ["<json value>"]]]

答案 1 :(得分:-1)

传递给executemany()的第二个参数必须是touples列表,而不是列表列表:

[tuple(l) for l in rows]

来自sqlite3模块文档:

  

?作为占位符放在您想要使用值的位置,然后   提供一个值元组作为游标的第二个参数   execute()方法。

同样适用于executemany()

答案 2 :(得分:-2)

这是一个很长的镜头......但也许您可以引用JSON值以确保解析按预期工作:

cursor.executemany("""INSERT OR IGNORE INTO FEATURES(UID, JSON) VALUES(?, '?')""", rows)

编辑:或者......这可能会迫使json在插入中产生刺痛?

rows = [ uid, '"{}"'.format( json_val ) for uid, json_val in rows ]
cursor.executemany("""INSERT OR IGNORE INTO FEATURES(UID, JSON) VALUES(?, ?)""", rows)