Как правильно вставить объект с внешним ключом в SQLAlchemy? - PullRequest
7 голосов
/ 10 апреля 2011

При использовании 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

1 Ответ

6 голосов
/ 13 апреля 2011

Если вы не используете отношения SQLAlchemy в своих объектах ORM, вам придется вручную работать с внешними ключами.Это означает, что вы должны сначала создать родительский объект, получить его первичный ключ из базы данных и использовать этот ключ во внешнем ключе ребенка:

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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...