Легкий DBAL для Python - PullRequest
       15

Легкий DBAL для Python

0 голосов
/ 09 августа 2011

Может кто-нибудь порекомендует мне какую-нибудь библиотеку Python DBAL, которая будет лучше всего отвечать моим требованиям.Я хотел бы написать свои операторы sql напрямую, большая часть логики будет в хранимых процедурах db (postgresql), поэтому мне нужно только вызывать процедуры db, передавать им аргументы и получать результаты.Библиотека должна помочь мне с цитированием (предотвращение внедрения SQL).Я играл с sqlalchemy, но мне кажется, что при написании sql-выражения непосредственно в метод engine.execute помощника по цитированию не существует.

Спасибо

Ответы [ 2 ]

3 голосов
/ 09 августа 2011

Вы должны были взглянуть на sqlalchemy более глубоко;Это делает хорошую работу цитирования заполнителей:

>>> engine = sqlalchemy.create_engine("sqlite:///:memory:")
>>> engine.execute("select ?", 5).fetchall()
[(5,)]
>>> engine.execute("select ?", "; drop table users; --").fetchall()
[(u'; drop table users; --',)]
0 голосов
/ 30 января 2015

psycopg2 (через DB-API) будет автоматически заключать в кавычки, чтобы предотвратить инъекцию SQL, если вы используете его правильно.(Путь Python неверен; вы должны передать параметры в качестве аргументов самой команде запроса.)

НЕПРАВИЛЬНО:

cur.execute('select * from table where last="%s" and first="%s"'
     % (last, first))

RIGHT:

cur.execute('select * from table where last=%s and first=%s',
     (last, first))

Примечание: вы не используете% и не ставите кавычки вокруг своих значений.

Синтаксис немного отличается для MySQLdb и sqlite3.(Например, sqlite использует? Вместо% s.)

Кроме того, для psycopg2 всегда используйте% s, даже если вы имеете дело с числами или другим типом.

...