Guest User

Untitled

a guest
Aug 11th, 2018
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.96 KB | None | 0 0
  1. sqlalchemy mapper event issue
  2. class User(Base):
  3. __tablename__ = 'user'
  4. userId = Column(Integer, primary_key=True)
  5. email = Column(String(60), unique=True,nullable=False)
  6. userName = Column(Unicode(16),unique=True)
  7. _password = Column('password', Unicode(60))
  8. groups = relationship("Group",secondary='userGroup')
  9. profile = relationship("UserProfile",uselist=False,backref='user')
  10.  
  11. class Group(Base):
  12. __tablename__ = 'group'
  13. groupId = Column(Integer,
  14. Sequence('group_id_seq', optional=True),
  15. primary_key=True)
  16. groupName = Column(Unicode(255), unique=True)
  17.  
  18. UserGroupTable = Table('userGroup', Base.metadata,
  19. Column('userId', Integer, ForeignKey(User.userId)),
  20. Column('groupId', Integer, ForeignKey(Group.groupId))
  21. )
  22.  
  23.  
  24. class UserProfile(Base):
  25. __tablename__='userProfile'
  26. userId = Column(Integer, ForeignKey('user.userId'), primary_key=True)
  27. dateJoin = Column(Date,nullable=False,default=func.current_date())
  28. gender = Column(Integer)
  29.  
  30. def before_insert_user_listener(mapper,connection,target):
  31. session=DBSession()
  32. ug=session.query(Group).filter(Group.groupName=='user').first()
  33. target.groups.append(ug)
  34. target.profile=UserProfile()
  35. log.debug(">>>>>")
  36.  
  37. def initialize_sql(engine):
  38. DBSession.configure(bind=engine)
  39. Base.metadata.bind = engine
  40. Base.metadata.create_all(engine)
  41. try:
  42. session = DBSession()
  43. #event register
  44. event.listen(User,'before_insert',before_insert_user_listener)
  45. group1 = Group('admin')
  46. group2 = Group('user')
  47. session.add(group1)
  48. session.add(group2)
  49. transaction.commit()
  50. except IntegrityError:
  51. pass
  52.  
  53. def my_before_commit(session):
  54. g=session.query(Group).filter(Group.groupName=='user').one()
  55. for target in session:
  56. if isinstance(target, User) and target in session.new:
  57. target.groups.append(ug)
Add Comment
Please, Sign In to add comment