我有以下代码
cur.executemany("INSERT INTO "+tablename+" (name,"+item+") VALUES(?,?)",(data,))
从data
动态插入值
现在我有两个问题:
如果我使用VALUES(?,?)",(data))
语法而不使用, after data
我会得到这个错误
Error Incorrect number of bindings supplied. The current statement uses 2, and there are 4 supplied.:
只能通过VALUES(?,?)",(data,))
与,
它解决了这个问题,数据被插入到表中。 但它创建了另一个问题,我无法查询数据库并使用类似
的内容 cursor = cur.execute("select * from "+tablename+" where name="+name+"")
我会收到此错误:
Error no such column: deek:
我不知道如何使用上面提到的语法查询数据库。
完整代码供参考:
import sqlite3
import sys
tablename='asfoor'
table_data=['Name','a','b','c']
try:
con = sqlite3.connect('dbtrials.db')
cur = con.cursor()
cur.execute("DROP TABLE IF EXISTS "+tablename+"")
cur.execute("CREATE TABLE "+tablename+" (ID INTEGER PRIMARY KEY AUTOINCREMENT ,Name TEXT, "+table_data[1]+" TEXT, "+table_data[2]+" TEXT, "+table_data[3]+" TEXT )")
name='deek'
item='a'
data=[name,item]
cur.executemany("INSERT INTO "+tablename+" (name,"+item+") VALUES(?,?)",(data,))
cursor = cur.execute("select * from "+tablename+" where name="+name+"")
for row in cursor :
print(row)
except sqlite3.Error as e:
print ("Error %s:" % e.args[0])
sys.exit(1)
finally:
if con:
con.close()
答案 0 :(得分:1)
错误的原因是因为您忘记在字符串周围加上引号。它应该是:
cursor = cur.execute("select * from "+tablename+" where name='"+name+"'")
但最好使用参数化查询:
cursor = cur.execute("select * from "+tablename+" where name= %s", (name,))
答案 1 :(得分:1)
executemany
期望序列或映射的迭代器作为第二个参数。
您的输入应如下所示:data = [[name, item]]
所以你期望的查询:
deek
,a
(2 args)如果没有内部列表,它会将字符串作为字符序列,因此您的查询是:
d
,e
,e
,k
(4 args)
a
(1 arg)