Возможно ли с помощью стандартной библиотеки Python (скажем, версия 2.5) выполнять запросы MS-SQL, которые параметризованы? - PullRequest
2 голосов
/ 16 марта 2009

Хотя конкретные данные, с которыми я сейчас работаю, не будут генерироваться пользователем и будут очищены в течение всего лишь одного дюйма их жизни во время моих обычных процедур проверки, я хотел бы узнать, как выполнить базовую операцию INSERT, SELECT и т. д. SQL-запросы, защищая себя от атак SQL-инъекций, просто для дальнейшего использования. Я бы лучше научился делать все правильно, с помощью параметризованных запросов.

Санитарная обработка всегда хороша, но я противопоставляю свой жалкий интеллект опытным хакерам. Выход вручную означает, что я, вероятно, пропускаю вещи, поскольку черные списки не так надежны, как белые списки. Для дополнительного пояснения я не имею в виду использование нотации (%s) для передачи в качестве параметра для построения строки, возможно с именем sqlstatement. Я думаю, что одно из волшебных слов, которое мне нужно знать, это «связывание».

Я также надеюсь избежать чего-либо за пределами стандартной библиотеки Python.

Для рассматриваемого приложения требуется Microsoft SQL 2005, если это актуально. Я использую ActiveState Python и модули dbi и odbc. Поскольку это база данных Someone Else, хранимые процедуры отсутствуют.

Ответы [ 2 ]

5 голосов
/ 16 марта 2009

PEP 249 (DB API 2.0) определяет 5 параметров стиля, PyMSSQL использует параметр типа == pyformat Но хотя это выглядит как интерполяция строк, на самом деле это связывание .

Обратите внимание на разницу между переплет :

cur.execute('SELECT * FROM persons WHERE salesrep=%s', 'John Doe')

и интерполяция (вот как это должно быть НЕ ):

cur.execute('SELECT * FROM persons WHERE salesrep=%s' % 'John Doe')

См. Также http://wiki.python.org/moin/DbApiFaq


"Я также надеюсь избежать чего-либо вне стандарта Python Библиотека. "

Тебе здесь не повезло. Единственный драйвер СУБД, который поставляется встроенным в Python, - это SQLite.

2 голосов
/ 16 марта 2009

Попробуйте pyodbc

Но если вы хотите, чтобы все было действительно просто (плюс тонны мощных функций), взгляните на sqlalchemy (который, кстати, использует pyodbc в качестве "драйвера" по умолчанию для mssql)

...