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().