@guit24

Проблема со вставкой аргументов в sql запрос python, в чем причина?

Запрос не отправляется. Код:

def register_command(command: str, user_id: int):
    time_now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    with sq.connect('history.db') as con:
        cur = con.cursor()

        cur.execute("""
        INSERT INTO commands (user_id, date, command_name) VALUES (7 , {} , 'd')""".format(time_now))

Ошибка:

line 38, in register_command
    cur.execute("""
sqlite3.OperationalError: near "23": syntax error
"
  • Вопрос задан
  • 52 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Ни в коем случае не делайте так
cur.execute("""INSERT INTO commands (user_id, date, command_name) VALUES (7 , {} , 'd')""".format(time_now))

Поймаете SQL injection, да и косяков со строками тоже будет немеряно. На один вы уже наткнулись.
Правильно будет так:
cur.execute("INSERT INTO commands (user_id, date, command_name) VALUES (7 , ?, 'd')", (time_now,))

В этом случае передаваемый аргумент будет правильно экранирован, завернут в кавычки и пр.
Это написано в начале документации по модулю sqlite3, но ведь документацию читают только лузеры. правда же?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы