2015-01-02 76 views
1

我是sqlalchemy的新手,只知道基本的sqlalachemy知識。如何使用sqlalchemy將多個表插入到MySQL中

現在我正在寫一些Python代碼,我需要做的是這樣的:

有一個用戶表,組表和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() 

順便說一句,在ID組表是自動增量。

我不知道這個程序是否可以簡化?我可以在一次交易中做到這一點嗎?

回答

0

它絕對可以簡化。首先,你最後只需要一個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 
相關問題