如何在SQLAlchemy中向自定义函数传递表对象作为参数?
解决SQLAlchemy中向UDF传递别名表参数的报错问题
你遇到的报错是因为直接将aliased()生成的映射类别名实例传给了UDF,SQLAlchemy无法将这个实例识别为合法的SQL表达式元素。解决方法是引用别名实例的__table__属性,它对应SQL中实际的表别名对象。
修改后的代码如下:
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.__table__, table2a_alias.__table__, table2b_alias.__table__))
说明
aliased(TableClass)返回的是映射类的别名包装实例,它主要用于ORM层面的查询操作,但作为UDF的表参数时,需要传递的是SQL层面的表表达式——也就是通过.__table__属性获取的别名表对象,这样SQLAlchemy才能正确生成对应的SQL语句,匹配你目标中的my_udf(table1, table2a, table2b)语法。
内容的提问来源于stack exchange,提问作者TheGingerNut
相关产品推荐
相关产品推荐

