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

时间:2014-03-11 10:59:06

标签: python sqlalchemy

我有一个CTE,它驻留在一个表函数中,需要传递一个参数。然后用

之类的东西调用我需要的数据

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

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

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

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

1 个答案:

答案 0 :(得分:2)

你见过the recipe for mapping arbitrary selects吗?您可以编写一个工厂方法,该方法返回表示给定参数的查询的类:

def myThingFunction(param):
  tmpSelect = select(..)
  class tmpCls(Base):
    __table__ = tmpSelect
  return tmpCls

但是这个食谱下面有一个注释说明创建映射是不必要的。我没有尝试过,但原则上,

session.query(func.myThingFunction("bar")).all()

也可能有用。 (func.foo动态创建GenericFunction,请参阅FunctionElement及以下文档。)