postgresql 在sqlalchemy中,有没有一种方法可以将表传递给用户定义的函数?

qmb5sa22  于 2023-11-18  发布在  PostgreSQL
关注(0)|答案(1)|浏览(114)

所以我通过SQLAlchemy连接到一个postgresql数据库,我想执行一个用户定义的函数,并将表作为参数。本质上,我试图将以下查询转换为SQLAlchemy:
第一个月
my_udf接受三个表参数并返回布尔值true或false。
到目前为止我已经

table1_alias=aliased(Table1)
table2a_alias=aliased(Table2)
table2b_alias=aliased(Table2)
results=sql_session.query(table1_alias)
.join(table2a_alias, table2a_alias.col1==table1_alias.col1)
.join(table2b_alias, table2b_alias.col1==var)
.filter(func.my_udf(table1_alias,table2a_alias,table2b_alias))

字符串
表1和表2是表Map。这给了我一个异常sqlalchemy.exc。ArgumentError:SQL表达式元素预期,得到<AliasedClass at 0x 7 f8 de 1aef 5d 0; Table 1>。是否有任何参数的AliasedClass我应该使用?

cwxwcias

cwxwcias1#

table1_alias=aliased(Table1,name="t1")
table2a_alias=aliased(Table2,name="t2a")
table2b_alias=aliased(Table2,name="t2b")
results=sql_session.query(table1_alias)
.join(table2a_alias, table2a_alias.col1==table1_alias.col1)
.join(table2b_alias, table2b_alias.col1==var)
.filter(text("my_udf(t1,t2a,t2b)"))

字符串
你可以使用text函数直接将sql修改为生成的查询,如果你命名了别名,你可以在生成的sql中通过名字引用它们,这样就完全绕过了类型检查。

相关问题