如何使用sqlalchemy将多个表插入到MySQL中

时间:2015-01-02 00:40:44

标签: python mysql sqlalchemy

我是sqlalchemy的新手,只知道基本的sqlalachemy知识。

现在我正在编写一些Python代码,我需要做的是如下:

有一个User表,一个Group表和一个GroupUser表。为简化问题,请说我已知用户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是autoincrement。

我想知道这个程序是否可以简化?我可以在一次交易中完成这项工作。

1 个答案:

答案 0 :(得分:1)

绝对可以简化。首先,最后只需要一个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