Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- SQLAlchemy equivalent of Django ORM's relationship-spanning filter
- class Blog(models.Model):
- name = models.CharField(max_length=100)
- class Entry(models.Model):
- blog = models.ForeignKey(Blog)
- headline = models.CharField(max_length=255)
- body_text = models.TextField()
- Entry.objects.filter(blog__name__exact='Beatles Blog')
- class Blog(Base):
- __tablename__ = "blog"
- id = Column(Integer, primary_key=True)
- name = Column(Unicode(100))
- class Entry(Base):
- __tablename__ = "entry"
- id = Column(Integer, primary_key=True)
- blogid = Column(Integer, ForeignKey(Blog.id))
- headline = Column(Unicode(255))
- body_text = Column(UnicodeText)
- blog = relationship(Blog, backref="entries")
- >>> q = session.query
- >>> print q(Entry).join(Blog).filter(Blog.name == u"One blog")
- SELECT entry.id AS entry_id, entry.blogid AS entry_blogid, entry.headline AS entry_headline, entry.body_text AS entry_body_text
- FROM entry JOIN blog ON blog.id = entry.blogid
- WHERE blog.name = ?
- >>> print q(Entry).filter(Entry.blog.has(Blog.name == u"One blog"))
- SELECT entry.id AS entry_id, entry.blogid AS entry_blogid, entry.headline AS entry_headline, entry.body_text AS entry_body_text
- FROM entry
- WHERE EXISTS (SELECT 1
- FROM blog
- WHERE blog.id = entry.blogid AND blog.name = ?)
- # ... and of course
- >>> blog = q(Blog).filter(Blog.name == u"One blog")
- >>> q(Entry).filter(Entry.blog == blog)
- session.query(model.Entry).join((model.Blog, model.Entry.blogid==model.Blog.id)).filter(model.Blog.name=='Beatles Blog').all()
Advertisement
Add Comment
Please, Sign In to add comment