Advertisement
Guest User

Untitled

a guest
Jun 24th, 2011
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.91 KB | None | 0 0
  1. #!/usr/bin/python
  2.  
  3. from sqlalchemy import create_engine, MetaData, Column, Integer, String, Boolean, Unicode, Float, ForeignKey, DateTime
  4. from sqlalchemy.orm import relationship, backref
  5. from sqlalchemy.ext.declarative import declarative_base
  6. from sqlalchemy.orm import sessionmaker
  7. from sqlalchemy.orm.query import Query
  8.  
  9. db = create_engine('sqlite:///:memory:', echo=True)
  10.  
  11. Base = declarative_base(db)
  12. metadata = Base.metadata
  13.  
  14. Session = sessionmaker(db)
  15.  
  16. class Blog(Base):
  17.     __tablename__ = 'blogs'
  18.  
  19.     id = Column(Integer, primary_key=True)
  20.  
  21.     def __init__(self):
  22.         pass
  23.  
  24. class Post(Base):
  25.     __tablename__ = 'posts'
  26.  
  27.     id = Column(Integer, primary_key=True)
  28.     blog_id = Column(Integer, ForeignKey(Blog.id))
  29.  
  30.     blog = relationship(Blog, backref='posts')
  31.  
  32.     def __init__(self, blog):
  33.         self.blog = blog
  34.  
  35. class Comment(Base):
  36.     __tablename__ = 'comments'
  37.  
  38.     id = Column(Integer, primary_key=True)
  39.     post_id = Column(Integer, ForeignKey(Post.id))
  40.  
  41.     post = relationship(Post, backref='comments')
  42.  
  43.     def __init__(self, post):
  44.         self.post = post
  45.  
  46. Blog.comments = relationship(Comment,
  47.                              primaryjoin=Comment.post_id.in_(Query(Post.id).filter(Post.blog_id == Blog.id)),
  48.                              foreign_keys=[Comment.post_id],
  49.                              viewonly=True)
  50.  
  51. metadata.drop_all()
  52. metadata.create_all()
  53.  
  54. session = Session()
  55.  
  56. b1 = Blog()
  57. b2 = Blog()
  58. session.add(b1)
  59. session.add(b2)
  60.  
  61. p1 = Post(b1)
  62. p2 = Post(b1)
  63. p3 = Post(b2)
  64.  
  65. c1 = Comment(p1)
  66. c2 = Comment(p1)
  67. c3 = Comment(p2)
  68. c4 = Comment(p3)
  69. c5 = Comment(p3)
  70.  
  71. session.commit()
  72.  
  73. print b1.posts
  74.  
  75. #print session.query(Comment).join(Post).filter(Post.blog == b1).all()
  76. #print session.query(Post.id).filter(Post.blog == b1).all()
  77. print session.query(Comment).filter(Comment.post_id.in_(Query(Post.id).filter(Post.blog == b1))).all()
  78.  
  79. session.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement