使用SQLAlchamy将表函数映射到模型

Gra*_*amB 5 python sqlalchemy

我有一个CTE,它驻留在一个表函数中,需要传递一个参数.然后用我喜欢的东西调用我需要的数据

SELECT * FROM myThingFunction('e543149c-6589-49c6-b962-bf2503c0e278')

如果可能,我想做的是映射SQLAlchamy模型,以便我可以对返回的记录集应用过滤器,限制等,例如

qry = session.query(Thing).limit(100)

我正在努力的是如何处理参数.我知道我将函数视为一个感觉有点错误的表,因为函数更像是一组复合关系而不是只映射到一种类型的域对象的表,但我需要以某种方式将这些数据导入Python.

Phi*_*lip 2

您看过映射任意选择的秘诀吗?您可以编写一个工厂方法,它返回一个表示给定参数查询的类:

def myThingFunction(param):
  tmpSelect = select(..)
  class tmpCls(Base):
    __table__ = tmpSelect
  return tmpCls
Run Code Online (Sandbox Code Playgroud)

但是这个秘籍下面有一条注释,指出创建映射是不必要的。我没试过,但原则上,

session.query(func.myThingFunction("bar")).all()
Run Code Online (Sandbox Code Playgroud)

也可能有效。(动态func.foo创建一个,请参阅FunctionElement及下面的文档。)GenericFunction