10

使用 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
4

1 回答 1

8

如果您没有在 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()
于 2011-04-12T23:02:28.420 回答