如何使用SQLAlchemy向MySQL中的多个表插入数据

4
我是一名新手,对sqlalchemy只有基本的了解。现在我正在编写一些Python代码,我需要做的就是以下内容:有一个用户表(User table)、一个组(Group table)和一个GroupUser table。为了简化问题,假设我已经知道用户id是100。现在我想要将一个新的组插入到Group表中,并获得组id,然后将(group_id, user_id)元组插入到GroupUser表中。
我可以写出类似下面的代码:
# Insert the group first.
session = self.DBSession()
new_group = Group(name = 'gname')
session.add(new_group)
session.commit()
# Then query back the new group id
gid = session.query(Group).filter(Group.name == 'gname').first().id
# At last, insert group-user
gu = GroupUser(gid=gid, uid=100)
session.add(gu)
session.commit()

顺便提一下,Group表中的id是自增的。
我想知道是否可以简化这个过程?能否在单个事务中完成。
1个回答

6

这段代码可以简化。首先,你只需要在最后一个地方使用一次commit()语句。其次,你缺少了flush()语句,它会自动为你提供(最后)插入组的ID。这意味着你不需要在单独的语句中显式地查询该ID。你的代码应该类似于:

session = self.DBSession()
new_group = Group(name='gname')
session.add(new_group)
session.flush() # NOTE: this will actually insert the record in the database and set
                # new_group.id automatically. The session, however, is not committed yet! 
gu = GroupUser(gid=new_group.id, uid=100)
session.add(gu)
session.flush() # not required actually because flush() below will do it for you, 
                # but explicit is always better than implicit =)

session.commit() # this will finally commit your transaction, i.e. 2 statements above

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接