Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- users_groups = Table('users_groups', Base.metadata,
- Column('user_id', Integer, ForeignKey('user.id', ondelete='CASCADE'), primary_key=True),
- Column('group_id', Integer, ForeignKey('group.id', ondelete='CASCADE'), primary_key=True)
- )
- class Entity(Base):
- __tablename__ = 'entity'
- id = Column(BigInteger, autoincrement=True, primary_key=True)
- type = Column(Integer, nullable=False)
- __mapper_args__ = {'polymorphic_on': type,
- 'polymorphic_identity': 1}
- class Group(Entity):
- __tablename__ = 'group'
- __mapper_args__ = {'polymorphic_identity': 3}
- id = Column(BigInteger, ForeignKey('entity.id', ondelete='CASCADE'), primary_key=True)
- name = Column(Unicode(100))
- url = Column(Unicode(255))
- description = Column(UnicodeText)
- def __init__(self, name):
- self.name = name
- friends = Table('friends', Base.metadata,
- Column('user_id', Integer, ForeignKey('user.id', ondelete='CASCADE'), primary_key=True),
- Column('friend_id', Integer, ForeignKey('user.id', ondelete='CASCADE'), primary_key=True)
- )
- class User(Entity):
- __tablename__ = 'user'
- __mapper_args__ = {'polymorphic_identity': 2}
- id = Column(BigInteger, ForeignKey('entity.id', ondelete='CASCADE'), primary_key=True)
- firstname = Column(Unicode(50))
- lastname = Column(Unicode(100))
- password = Column(Unicode(50))
- email = Column(String(255))
- email_authed = Column(Boolean)
- groups = relationship('Group', secondary=users_groups, backref='user')
- mapper(User, User.__table__, non_primary=True,
- properties={
- 'friends': relationship(User,
- secondary=friends,
- primaryjoin=User.id == friends.c.user_id,
- secondaryjoin=friends.c.friend_id == User.id),
- })
- user = User()
- user.firstname = u'John'
- user.lastname = u'Doe'
- friend = User()
- friend.firstname = u'William the friend'
- user.friends = [friend]
- self.session.add(user)
- self.session.flush()
- result = self.session.execute('SELECT * FROM user').fetchall()
- print result
- result = self.session.execute('SELECT * FROM friends').fetchall()
- print result
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement