我正在用Bottle做一些网络测验。 Web部件运行良好,我可以显示问题并将答案发布回main.py。在遍历POST数据时,我将tupple(Qn,ans)附加到datalist []中。
不是每个页面上的第一个问题编号,我以此方式创建此列表:
datalist=[]
datum=()
for i in range(no,nend):
noQ = "Q"+str(i)
rep = request.POST.get(noQ)
rep= int(rep)
#print (f"{noQ}: {rep}")
datum=(noQ,rep)
datalist.append(datum)
这是首页的格式:
('Q1',4)('Q2',3)('Q3',6)
第二页的数据列表如下:
('Q4',4)('Q5',3)('Q6',4) 等等
我需要将答案添加到数据库中的表中。 由于我每页显示测验3个问题,因此我想一次批量更新表3的答案。因此,列名将递增Q1,Q2 ... Qn。 看起来很简单,但是当我整理以下语句时:
cur.executemany("UPDATE Q_R SET ?=? where id = 1", datalist)
(ID也将更改),我得到:
sqlite3.OperationalError:“?”附近:语法错误
我试图在那里使用一些字符串格式,但是它只是嘲笑我。
cur.executemany(“更新Q_R SET%s?=?其中id = 1”,数据列表)
我知道这是用于更新多列的,所以我应该以某种方式类似于:
cur.executemany('UPDATE Q_R SET %s=?, %s=?, %s=? where id=id', what goes here ?)
答案 0 :(得分:0)
答案是在循环期间创建2个元组列表,然后将ID附加在rep_list的末尾。所以代码是这样的:
statement="UPDATE Q_R SET %s=?, %s=?, %s=? where id=?" % tuple(Q_list)
cur.execute(statement, rep_list)
有时候,解释问题正在解决它。感谢您的帮助。