所以我试图做一些与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语句(顾名思义)。
是否有另一种方法来构建捕获查询的变形金刚(可能在它运行之前,并修改查询)
提前致谢