Sqlalchemy: postgresql paramstyle для engine.execute () - PullRequest
2 голосов
/ 16 августа 2011

Я подключен к postgresql с sqlalchemy. Когда я пытаюсь этот код:

e = create_engine('')
r = e.execute("select ?", 5)

это дает мне:

sqlalchemy.exc.ProgrammingError: (ProgrammingError) syntax error at end of input

В соответствии с http://www.sqlalchemy.org/docs/core/connections.html?highlight=engine#sqlalchemy.engine.base.Connection.execute существуют различные типы paramstyles ... После более глубокого исследования я обнаружил, что стандартным параметром postgresql Dialect является "pyformat".

Может кто-нибудь показать мне, как использовать этот pyformat на каком-то примере? Я просто хотел бы использовать заполнители или именованные заполнители для формирования оператора SQL.

Я пытался:

e.execute("select %s, %s;", "test", "test2")

Но это тоже не работает.

Спасибо

редактирование: конечно, я передаю правильную строку подключения в метод create_engine: -)

1 Ответ

2 голосов
/ 17 августа 2011

Документация, на которую вы ссылаетесь, напрямую ссылается на PEP 249, которая показывает различные стили.

О pyformat говорится:

'pyformat' Коды расширенного формата Python,например, '... WHERE name =% (name) s'

Так вот, что вам нужно использовать.

По Googling на "DBAPI pyformat" вторая ссылка - это ссылка документация psycopg2 .После упоминания о том, что он использует pyformat, есть ссылка «См. Также», ссылающаяся на страницу с множеством примеров .

Примеры использования этой ссылки приведены в исходной ссылке:

e.execute("select %s, %s;", ("param1", "test"), ("param2", "test2"))

Вы также можете использовать этот синтаксис:

e.execute("select %(param1)s, %(param2)s;", param1="test", param2="test2"))

Что лучше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...