【问题标题】:Python3 bottle SQLite3 Quiz - update with variable colum name and datalistPython3 瓶 SQLite3 测验 - 使用变量列名和数据列表更新
【发布时间】:2019-10-26 07:01:19
【问题描述】:

我正在使用瓶子做一个小网络测验。 Web 部件运行良好,我可以显示问题并将答案发布回我的 main.py。当我遍历 POST 数据时,我将元组 (Qn, ans) 附加到 datalist[]。

var no 是每个页面上的第一个问题编号,我以这种方式创建此列表:

        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("UPDATE Q_R SET %s?=? where id = 1", datalist)

我知道这是为了更新多列,所以我应该有类似的东西:

cur.executemany('UPDATE Q_R SET %s=?, %s=?, %s=? where id=id', what goes here ?)

【问题讨论】:

    标签: python-3.x sqlite bottle


    【解决方案1】:

    答案是在循环期间创建 2 个元组列表,然后将 ID 附加到 rep_list 的末尾。所以代码是这样的:

    statement="UPDATE Q_R SET %s=?, %s=?, %s=? where id=?" % tuple(Q_list)
    cur.execute(statement, rep_list)
    

    有时,解释问题就是解决问题。感谢您的帮助。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-14
      相关资源
      最近更新 更多