如何在SQLAlchemy和Firebird中的自定义查询中将Python列表作为参数绑定?

时间:2019-04-23 12:31:09

标签: python sqlalchemy firebird

环境

我正在使用带有SQLAlchemy的Firebird数据库作为ORM包装器。

背景

我知道通过使用android.enableJetifier=true android.useAndroidX=true 可以在in_子句中传递sales_id列表并获得结果。

我有一个用例,其中必须使用文本sql

问题

这是我的摘录,

IN

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

我需要做的是传递token unknown errorsales_id)的列表以绑定参数([1, 2, 3])并获得结果集。

1 个答案:

答案 0 :(得分:4)

如果使用的DB-API驱动程序不提供对元组和列表的特殊处理,无法为行构造函数和IN谓词生成表达式,则可以使用{{3}提供的新功能“扩展” }:

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,以容纳用作参数的序列。