Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- sqlalchemy mapper event issue
- class User(Base):
- __tablename__ = 'user'
- userId = Column(Integer, primary_key=True)
- email = Column(String(60), unique=True,nullable=False)
- userName = Column(Unicode(16),unique=True)
- _password = Column('password', Unicode(60))
- groups = relationship("Group",secondary='userGroup')
- profile = relationship("UserProfile",uselist=False,backref='user')
- class Group(Base):
- __tablename__ = 'group'
- groupId = Column(Integer,
- Sequence('group_id_seq', optional=True),
- primary_key=True)
- groupName = Column(Unicode(255), unique=True)
- UserGroupTable = Table('userGroup', Base.metadata,
- Column('userId', Integer, ForeignKey(User.userId)),
- Column('groupId', Integer, ForeignKey(Group.groupId))
- )
- class UserProfile(Base):
- __tablename__='userProfile'
- userId = Column(Integer, ForeignKey('user.userId'), primary_key=True)
- dateJoin = Column(Date,nullable=False,default=func.current_date())
- gender = Column(Integer)
- def before_insert_user_listener(mapper,connection,target):
- session=DBSession()
- ug=session.query(Group).filter(Group.groupName=='user').first()
- target.groups.append(ug)
- target.profile=UserProfile()
- log.debug(">>>>>")
- def initialize_sql(engine):
- DBSession.configure(bind=engine)
- Base.metadata.bind = engine
- Base.metadata.create_all(engine)
- try:
- session = DBSession()
- #event register
- event.listen(User,'before_insert',before_insert_user_listener)
- group1 = Group('admin')
- group2 = Group('user')
- session.add(group1)
- session.add(group2)
- transaction.commit()
- except IntegrityError:
- pass
- def my_before_commit(session):
- g=session.query(Group).filter(Group.groupName=='user').one()
- for target in session:
- if isinstance(target, User) and target in session.new:
- target.groups.append(ug)
Add Comment
Please, Sign In to add comment