Advertisement
Guest User

Untitled

a guest
Jul 11th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.17 KB | None | 0 0
  1. users_groups = Table('users_groups', Base.metadata,
  2.     Column('user_id', Integer, ForeignKey('user.id', ondelete='CASCADE'), primary_key=True),
  3.     Column('group_id', Integer, ForeignKey('group.id', ondelete='CASCADE'), primary_key=True)
  4.     )
  5.  
  6. class Entity(Base):
  7.     __tablename__ = 'entity'
  8.     id = Column(BigInteger, autoincrement=True, primary_key=True)
  9.     type = Column(Integer, nullable=False)
  10.     __mapper_args__ = {'polymorphic_on': type,
  11.                        'polymorphic_identity': 1}
  12.  
  13. class Group(Entity):
  14.     __tablename__ = 'group'
  15.     __mapper_args__ = {'polymorphic_identity': 3}
  16.  
  17.     id = Column(BigInteger, ForeignKey('entity.id', ondelete='CASCADE'), primary_key=True)
  18.     name = Column(Unicode(100))
  19.     url = Column(Unicode(255))
  20.     description = Column(UnicodeText)
  21.  
  22.     def __init__(self, name):
  23.         self.name = name
  24.  
  25.  
  26. friends = Table('friends', Base.metadata,
  27.     Column('user_id', Integer, ForeignKey('user.id', ondelete='CASCADE'), primary_key=True),
  28.     Column('friend_id', Integer, ForeignKey('user.id', ondelete='CASCADE'), primary_key=True)
  29.     )
  30.  
  31. class User(Entity):
  32.     __tablename__ = 'user'
  33.     __mapper_args__ = {'polymorphic_identity': 2}
  34.  
  35.     id = Column(BigInteger, ForeignKey('entity.id', ondelete='CASCADE'), primary_key=True)
  36.     firstname = Column(Unicode(50))
  37.     lastname = Column(Unicode(100))
  38.     password = Column(Unicode(50))
  39.     email = Column(String(255))
  40.     email_authed = Column(Boolean)
  41.  
  42.     groups = relationship('Group', secondary=users_groups, backref='user')
  43.  
  44. mapper(User, User.__table__, non_primary=True,
  45.            properties={
  46.            'friends': relationship(User,
  47.            secondary=friends,
  48.            primaryjoin=User.id == friends.c.user_id,
  49.            secondaryjoin=friends.c.friend_id == User.id),
  50.            })
  51.  
  52. user = User()
  53. user.firstname = u'John'
  54. user.lastname = u'Doe'
  55.        
  56. friend = User()
  57. friend.firstname = u'William the friend'
  58. user.friends = [friend]
  59.        
  60. self.session.add(user)
  61. self.session.flush()
  62.  
  63. result = self.session.execute('SELECT * FROM user').fetchall()
  64.  
  65. print result
  66. result = self.session.execute('SELECT * FROM friends').fetchall()
  67. print result
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement