Почему один и тот же запрос к базе sqlite3 дает разный результат?

Во время ыполнения программы запрос к бд выдает ошибку


а через консоль запрос к этой же бд успешно выполняется

    cursor.execute("""update users set userorder={uord} where id={idd}""".format(idd=uid, uord="`{}:{}`".format(
                                                                                              str(country),
                                                                                              str(ipv))
                                                                                              )
               )

вот запрос в теле функции

cursor.execute('update users set userorder="us:6" where id="1290609049"')

вот запрос выполняю в консоли питона, просто подставив данные из функции В консоли запрос выполняется без ошибок, а во время выполнения программ вылазит во такая ошибка

sqlite3.OperationalError: no such column: us:6

данные в консоли подставляю такие же как и во время выполнения фунции.

Почему выдает ошибку и как это исправить?


Ответы (2 шт):

Автор решения: MaxU

Используйте параметризированные запросы:

parms = (f"{country}:{ipv}", uid)
cursor.execute('update users set userorder=? where id=?', parms)
  • во-первых это автоматически разрешит ваши проблемы с кавычками (если тип переменных будет соответствовать типу данных в таблице)
  • во-вторых это обезопасит вас от SQL injections
  • в-третьих это скорее всего будет выполняться быстрее, т.к. не надо будет повторно парсить и оптимизировать запрос для разных значений
→ Ссылка
Автор решения: CrazyElf

Какой-то у вас зоопарк кавычек. Попробуйте так:

cursor.execute('update users set userorder="{country}:{ipv}" where id="{idd}"'.format(country=str(country), ipv=str(ipv), idd=uid))

Но лучше используйте параметризованные запросы из другого ответа.

→ Ссылка