sqlite3 ошибка в коде near "(": syntax error

Рейтинг: 0Ответов: 1Опубликовано: 12.08.2023

Ошибка:

File "C:\Users\user\PycharmProject\pythonProject10\lesson1\app\database.py", line 18, in cmd_start_db
    cur.execute("INSERT INTO (tg_id) accounts VALUES ({key})".format(key=user_id))
sqlite3.OperationalError: near "(": syntax error

Основной код:

async def cmd_start_db(user_id):
    user = cur.execute("SELECT * FROM accounts WHERE tg_id == {key}".format(key=user_id)).fetchone()
    if not user:
        cur.execute("INSERT INTO (tg_id) accounts VALUES ({key})".format(key=user_id))
        db.commit()

Ответы

▲ 0

Ошибка возникает на строке 18 в функции cmd_start_db. В этой строке происходит попытка выполнить SQL-запрос для вставки значения user_id в таблицу accounts. Для исправления этой проблемы, вам необходимо указать правильное имя таблицы после ключевого слова INSERT INTO. Например, если имя таблицы - accounts, то SQL-запрос должен выглядеть следующим образом:

cur.execute("INSERT INTO accounts (tg_id) VALUES ({key})".format(key=user_id))

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

async def cmd_start_db(user_id):
    user = cur.execute("SELECT * FROM accounts WHERE tg_id = ?", (user_id,)).fetchone()
    if not user:
        cur.execute("INSERT INTO accounts (tg_id) VALUES (?)", (user_id,))
        db.commit()