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

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

Похожие вопросы
Greenway Global Новосибирск
от 150 000 ₽
SPA2099 Москва
До 100 000 ₽
HR Prime Москва
от 300 000 до 3 800 000 ₽