Guest User

Untitled

a guest
May 2nd, 2012
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.52 KB | None | 0 0
  1. SQLAlchemy equivalent of Django ORM's relationship-spanning filter
  2. class Blog(models.Model):
  3. name = models.CharField(max_length=100)
  4.  
  5. class Entry(models.Model):
  6. blog = models.ForeignKey(Blog)
  7. headline = models.CharField(max_length=255)
  8. body_text = models.TextField()
  9.  
  10. Entry.objects.filter(blog__name__exact='Beatles Blog')
  11.  
  12. class Blog(Base):
  13. __tablename__ = "blog"
  14. id = Column(Integer, primary_key=True)
  15. name = Column(Unicode(100))
  16.  
  17. class Entry(Base):
  18. __tablename__ = "entry"
  19. id = Column(Integer, primary_key=True)
  20. blogid = Column(Integer, ForeignKey(Blog.id))
  21. headline = Column(Unicode(255))
  22. body_text = Column(UnicodeText)
  23.  
  24. blog = relationship(Blog, backref="entries")
  25.  
  26. >>> q = session.query
  27. >>> print q(Entry).join(Blog).filter(Blog.name == u"One blog")
  28. SELECT entry.id AS entry_id, entry.blogid AS entry_blogid, entry.headline AS entry_headline, entry.body_text AS entry_body_text
  29. FROM entry JOIN blog ON blog.id = entry.blogid
  30. WHERE blog.name = ?
  31.  
  32. >>> print q(Entry).filter(Entry.blog.has(Blog.name == u"One blog"))
  33. SELECT entry.id AS entry_id, entry.blogid AS entry_blogid, entry.headline AS entry_headline, entry.body_text AS entry_body_text
  34. FROM entry
  35. WHERE EXISTS (SELECT 1
  36. FROM blog
  37. WHERE blog.id = entry.blogid AND blog.name = ?)
  38.  
  39. # ... and of course
  40. >>> blog = q(Blog).filter(Blog.name == u"One blog")
  41. >>> q(Entry).filter(Entry.blog == blog)
  42.  
  43. 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