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

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

Похожие вопросы
от 200 000 до 300 000 ₽
Greenway Global Новосибирск
от 150 000 ₽
Akronix Санкт-Петербург
от 150 000 до 200 000 ₽