@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
"
  • Вопрос задан
  • 54 просмотра
Решения вопроса 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, но ведь документацию читают только лузеры. правда же?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы