Как я могу связать список Python как параметр в пользовательском запросе в SQLAlchemy и Firebird? - PullRequest
2 голосов
/ 23 апреля 2019

Окружающая среда

Я использую базу данных Firebird с SQLAlchemy в качестве оболочки ORM.

Backgound

Я знаю, что с помощью in_ можно передать список sales_id в предложении IN и получить результат.

У меня есть сценарий использования, где я должен использовать textual sql .

Вопрос

Вот мой фрагмент,

conn.execute('select * from sellers where salesid in (:sales_id)', sales_id=[1, 2, 3] ).fetchall()

Это всегда бросает token unknown error

Все, что мне нужно, это передать список sales_id ([1, 2, 3]) для привязки параметра (:sales_id) и получить набор результатов.

1 Ответ

4 голосов
/ 23 апреля 2019

Если вы используете драйвер DB-API, который не обеспечивает специальной обработки кортежей и списков для создания выражений для конструкторов строк и IN предикатов, вы можете использовать несколько новую функцию "расширения", предоставляемую bindparam

stmt = text('select * from sellers where salesid in :sales_id') 
stmt = stmt.bindparams(bindparam('sales_id', expanding=True))

conn.execute(stmt, sales_id=[1, 2, 3]).fetchall()

Это заменит заполнитель sales_id для каждого запроса на требуемые заполнители для соответствия последовательности, используемой в качестве параметра.

...