Бутылка Python3 SQLite3 Quiz - обновление с переменным именем столбца и списком данных - PullRequest
0 голосов
/ 11 июня 2019

Я делаю небольшую веб-викторину, используя бутылку.Веб-часть работает хорошо, я могу отобразить вопросы и отправить ответы обратно в мой main.py.Когда я перебираю данные POST, я добавляю набор (Qn, ans) к списку данных [].

var, не являясь первым номером вопроса на каждой странице, я создаю этот список следующим образом:

        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)

(идентификатор тоже изменится), я получу:

sqlite3.OperationalError: near "?":синтаксическая ошибка

Я пытался использовать там некоторое форматирование строк, но это просто смеется надо мной.

cur.executemany ("UPDATE Q_R SET% s? =? Где id = 1", список данных)

Я знаю, что это для обновления нескольких столбцов, так что каким-то образом у меня должно быть что-то похожее:

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

1 Ответ

0 голосов
/ 12 июня 2019

Ответ состоял в том, чтобы сделать 2 списка кортежей во время цикла, а затем добавить идентификатор в конце списка rep_list.Код выглядит так:

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

Иногда объяснение проблемы - это ее решение.Спасибо за помощь.

...