Почему один и тот же запрос к базе 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))
Но лучше используйте параметризованные запросы из другого ответа.