我在SQLAlchemy中使用关联代理,以避免不断地将仅包含Entity的表(name)联接为entity_proper_name

class Institution(Base):

    entity_id = Column(
        String(8, u'SQL_Latin1_General_CP1_CI_AS'),
        ForeignKey(Entity.entity_id),
        primary_key=True)
    entity = relationship(Entity, uselist=False)
    name = association_proxy('entity', 'entity_proper_name')


我可以用==查询类,但不能用.like查询:

query = s.query(Institution).filter(Institution.name=='Correct Name')
# works fine

query = s.query(Institution).filter(Institution.name.like('%Correct N%')
# AttributeError: 'AssociationProxy' object has no attribute 'like'


是否可以使用.like而不拒绝关联代理方法?

最佳答案

这个问题很老了-没有答案...而且似乎还没有找到一个好的解决方案。

我只是遇到了相同的问题,并执行以下操作:

from sqlalchemy.ext.associationproxy import AssociationProxy

def like_filter(attr, *args, **kwargs):
    filter_attr = attr
    if isinstance(filter_attr, AssociationProxy):  # If assoc_proxy get remote_attr as like() doesnt work
        filter_attr = filter_attr.remote_attr
    return filter_attr.like(*args, **kwargs)


所以,现在我可以做:

s.query(Institution).filter(like_filter(Institution.name, '%Correct N%'))

不理想。绝对是一种解决方法。但是有效:)

关于python - 在SQLAlchemy关联代理上使用“赞”过滤,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36017947/

10-12 21:18