2011-04-10 47 views
6

當使用SQLAlchemy時,將對象插入到一個列是外鍵的表中然後提交它的理想方法是什麼?在下面的代碼中插入具有外部對象的對象有什麼問題嗎?用SQLAlchemy中的外鍵插入對象的正確方法是什麼?

def retrieve_objects(): 
    session = DBSession() 
    return session.query(SomeClass).all() 

def insert_objects(): 
    session = DBSession() 
    for obj in retrieve_objects(): 
     another_obj = AnotherClass(somefield=0) 
     obj.someforeignkey = another_obj 
     session.add(obj) 
    session.flush() 
    transaction.commit() 
    session.close() 
    return None 
+2

你爲什麼不申報的外鍵關係作爲其一部分的模型和一切都會自動爲你完成?這就是爲什麼我們有Sqlalchemy。如果你不使用它的功能,那麼根本不要使用Sqlalchemy。 – 2011-04-10 08:30:48

回答

5

如果您不在ORM對象上使用SQLAlchemy關係,則必須手動處理外鍵。這意味着你必須首先創建父對象,獲取其主鍵從數據庫返回的,並使用該密鑰在孩子的外鍵:

def retrieve_objects(): 
    session = DBSession() 
    return session.query(SomeClass).all() 

def insert_objects(): 
    session = DBSession() 
    for obj in retrieve_objects(): 
     another_obj = AnotherClass(somefield=0) 
     session.add(another_obj) 
     session.flush() # generates the pkey for 'another_obj' 
     obj.someforeignkey = another_obj.id # where id is the pkey 
     session.add(obj) 
    transaction.commit() 
相關問題