Tie*_*Dad 4 python mysql sqlalchemy
我是 sqlalchemy 的新手,只了解基本的 sqlalchemy 知识。
现在我正在编写一些Python代码,我需要做的事情如下:
有一个用户表、一个组表和一个组用户表。为了简化问题,假设我知道用户 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()
Run Code Online (Sandbox Code Playgroud)
顺便说一句,Group表中的id是自增的。
我想知道这个程序是否可以简化?我可以在一次交易中完成此操作吗?
它绝对可以简化。首先,最后只需要一个 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6290 次 |
| 最近记录: |