我正在尝试使用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字符串中的逗号。
我怎样才能解决这个问题?
答案 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)