簡體   English   中英

在 SQLAlchemy 關聯代理上使用“like”過濾

[英]Filter with 'like' on SQLAlchemy association proxy

我在 SQLAlchemy 中使用關聯代理來避免不斷加入只包含name的表( Entity ),作為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%'))

不理想。 絕對是一種解決方法。 但有效:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM