Stodge wrote:
> I have two classes with a third table:
>
> document_tags = Table('document_tags', metadata,
>       Column('document_id', Integer, ForeignKey('documents.id')),
>       Column('tag_id', Integer, ForeignKey('tags.id'))
> )
>
> class Document(Base):
>       __tablename__ = 'documents'
>
>       id = Column(Integer, primary_key=True)
>       title = Column(String)
>       filename = Column(String)
>       tags = relation('Tag', secondary=document_tags, backref='tags')
>
>       def __init__(self, title, filename):
>               self.title = title
>               self.filename = filename
>
> class Tag(Base):
>       __tablename__ = 'tags'
>
>       id = Column(Integer, primary_key=True)
>       tag = Column(String)
>
>       def __init__(self, tag):
>               self.tag = tag
>
> I want to find all documents with tags in a given list of tags:
>
> documents =
> session.query(Document).filter(Document.tags.in_(tag_list))
>
> except I get the familiar message that the "in_()" operator is not
> currently implemented for many-to-one-relations.
>
> I've searched and found some alternatives but I can't get any to work.
> Is there an easy example that will make this work? Thanks

if the error message says "many-to-one" then that's a bug.  Your relation
is many-to-many.

in this case the syntactically easiest method is to use any(). 
Document.tags.any(Tag.id.in_([t.id for t in tag_list])).

A join could be more performant, which would be:

query.join(Document.tags).filter(Tag.id.in_([t.id for t in tag_list]))




>
> --
> You received this message because you are subscribed to the Google Groups
> "sqlalchemy" group.
> To post to this group, send email to sqlalch...@googlegroups.com.
> To unsubscribe from this group, send email to
> sqlalchemy+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/sqlalchemy?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalch...@googlegroups.com.
To unsubscribe from this group, send email to 
sqlalchemy+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to