Sqlite3.OperationalError: рядом с "?": синтаксическая ошибка

У меня проблема, я просто продолжаю получать ошибку, но я пытаюсь отформатировать ее. Также попробовал% s.

Любые предложения?

group_food = (group, food)
group_food_new = (group, food, 1)

with con:

    cur = con.cursor() 
    tmp = cur.execute("SELECT COUNT(Name) FROM (?) WHERE Name=?", group_food)

    if tmp == 0:
        cur.execute("INSERT INTO ? VALUES(?, ?)", group_food_new)
    else: 
        times_before = cur.execute("SELECT Times FROM ? WHERE Name=?", group_food)
        group_food_update = (group, (times_before +1), food)

        cur.execute("UPDATE ? SET Times=? WHERE Name=?", group_food_update)

Ответы

Ответ 1

Вы не можете использовать SQL-параметры для размещения в SQL-объектах; одна из причин использования параметров SQL заключается в том, чтобы избежать значения, чтобы база данных никогда не могла принять содержимое для объекта базы данных.

Вам придется интерполировать объекты базы данных отдельно:

cur.execute("SELECT COUNT(Name) FROM {} WHERE Name=?".format(group), (food,))

и

cur.execute("INSERT INTO {} VALUES(?, ?)".format(group), (food, 1))

и

cur.execute("UPDATE {} SET Times=? WHERE Name=?".format(group),
            (times_before + 1, food))

Если ваши имена объектов являются пользователями, вам нужно будет сделать свою (строгую) проверку на имена объектов, чтобы предотвратить атаки SQL-инъекций. Всегда проверяйте их в отношении существующих объектов в этом случае.