我正在运行以下代码:
#converts strings that are ints to int.
for i,x in enumerate(values):
try:
values[i] = int(x)
except:
pass
# Fills values with NULLs if needed
if len(values) < no_of_columns:
values = values + ["NULL"]*(no_of_columns-len(values))
print(values)
# Creates dict with params and values
params = {}
for i, x in enumerate(values):
params[i] = x
query = "INSERT INTO {} VALUES ({});".format(table_name,",".join(['%s']*no_of_columns))
self.cur.execute(query, params)
self.print_answer()
会发生什么是我收到以下错误:
Traceback (most recent call last):
File "interface.py", line 228, in <module>
db.run()
File "interface.py", line 219, in run
actions[self.print_menu()-1]()
File "interface.py", line 194, in insert
self.cur.execute(query, params)
File "build/bdist.macosx-10.6-intel/egg/pgdb.py", line 323, in execute
File "build/bdist.macosx-10.6-intel/egg/pgdb.py", line 359, in executemany
pg.OperationalError: internal error in 'BEGIN': not enough arguments for format string
这让我很困惑,因为当我打印参数和引用时,我可以看到元素的数量与%s
标签的数量完全相同:
params = {0: 22, 1: 'ehj', 2: 'NULL', 3: 'NULL'}
query = 'INSERT INTO books VALUES (%s,%s,%s,%s);'
我究竟做错了什么?参数应该与 %s 的数量相同,对吧?