在hybrid_property选择sqlalchemy自定义变换器

时间:2015-08-05 00:55:39

标签: python sqlalchemy

所以我试图做一些与SQLAlchemy中的Hybrid Attributes Doc略有不同的东西

from sqlalchemy.ext.hybrid import Comparator

class GrandparentTransformer(Comparator):
    def operate(self, op, other):
        def transform(q):
            q.join(Blah).filter(Blah.type_id == Node.id, Blah.type == "Node")#some_complex_joins
            #Possibly try to add more select statements also because of the 
        return transform

Base = declarative_base()

class Node(Base):
    __tablename__ = 'node'
    id =Column(Integer, primary_key=True)
    parent_id = Column(Integer, ForeignKey('node.id'))
    parent = relationship("Node", remote_side=id)

    @hybrid_property
    def grandparent(self):
        return self

    @grandparent.comparator
    def grandparent(cls):
        return GrandparentTransformer(cls)


#sample query 
session.query(Node.grandparent).all()

所以我基本上试图用hybrid属性捕获查询,并在调用特定的Hybrid属性时通过转换器运行它;但是,Comparator上的自定义Transformer仅适用于where语句(顾名思义)。

是否有另一种方法来构建捕获查询的变形金刚(可能在它运行之前,并修改查询)

提前致谢

0 个答案:

没有答案