SQLAlchemy - Как увидеть идентификатор первичного ключа для вновь созданной записи?

Как увидеть идентификатор первичного ключа для вновь созданной записи?

models.py:

class Foo(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    foobar = db.Column(db.String(64), unique = True)
def __init__(self, foobar):
    self.foobar = foobar

views.py:

foo = Foo(foobar)
db.session.add(foo)
id = How?(foo.id)

1 ответ

Решение
 db.session.flush()
 #id is a Python builtin...
 id_= foo.id

Происходит то, что ваш исходный код до сброса был только в вашей программе, ничего в db. Столбец id, вероятно, является автоматически сгенерированным полем, которое присваивается во время вставки. Как только запись вставлена ​​(сброс записывает изменения в базу данных), SQLAlchemy в основном делает выборочный идентификатор из <inserted> и возвращает результаты (для этого разные базы данных используют разные механизмы). И теперь у вас есть идентификатор.

Коммиты и откаты отличаются по природе от флеша. Они влияют на то, что уже есть в БД.

Также при пометке вашего комментария мне нужно использовать его при добавлении других записей в БД. Я объяснил, как получить значение поля id, но это не значит, что его целесообразно использовать в более широком контексте. SQLAlchemy имеет различные способы связать записи перед flush().

Другие вопросы по тегам