python - फ्लास्क-एसक्यूएललेमी: एक संबंध के माध्यम से कई फिल्टर



flask sqlalchemy (1)

मेरे पास दो मॉडल, टैग और फ़ोटो हैं, जिनके पास कई-से-कई-रिश्ते हैं जैसे:

tag_identifier = db.Table('tag_identifier',
                          db.Column('photo_id', db.Integer, db.ForeignKey('photo.id')),
                          db.Column('tag_id', db.Integer, db.ForeignKey('tag.id'))
                         )

class Tag(db.Model):
  id = db.Column(db.Integer, primary_key=True)

class Photo(db.Model):
  id = db.Column(db.Integer, primary_key=True)
  tags = db.relationship('Tag', secondary=tag_identifier,
                         backref=db.backref('photos', lazy='dynamic'), lazy='dynamic')

मैं उन सभी फ़ोटो की क्वेरी करने की कोशिश कर रहा हूं जिनमें एकाधिक विशिष्ट टैग हैं उदाहरण के लिए, अगर मैं <Tag 1> और <Tag 2> सभी फ़ोटो पूछता हूं:

Photo.query.join(Photo.tags).filter(Tag.id==1).all() वापस आएंगे

[<Photo 1>, <Photo 2>, <Photo 3>, <Photo 4>] , और

Photo.query.join(Photo.tags).filter(Tag.id==2).all() वापस आएंगे

[<Photo 1>, <Photo 2>, <Photo 5>, <Photo 6>]

इस उदाहरण में, निम्न परिणाम प्राप्त करने के लिए मुझे क्या कार्रवाई करने की आवश्यकता होगी: [<Photo 1>, <Photo 2>]


q = (Photo.query
     .filter(Photo.tags.any(Tag.id == 1))
     .filter(Photo.tags.any(Tag.id == 2))
     )

ध्यान दें कि आप नामों की जांच भी कर सकते हैं:

tag1, tag2 = 'tag1', 'tag2'
q = (Photo.query
     .filter(Photo.tags.any(Tag.name == tag1))
     .filter(Photo.tags.any(Tag.name == tag2))
     )




flask-sqlalchemy