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 に答える