id1=%d AND id2=%d' % (1, 2))
парамеры в SQL-запросы надо передавать отдельно:
cursor.execute('SELECT * FROM table WHERE id1=? AND id2=?', (1, 2))
примечание: в разных драйверах могут быть разные стили передачи параметров, не только "?"
это позволяет
1) избежать ошибок безопасности, когда непроверенные данные попадают в запрос - https://xkcd.com/327/
2) не заморачиваться с корректным экранированием символов
3) в ряде субд улучшает кэширование запросов
4) в некоторых субд позволяет проверять типы данных
#faq #sql #нубоошибки
Всё так
Обсуждают сегодня