сброс sqlalchemy () и получает вставленный идентификатор?

Я хочу сделать что-то вроде этого:

f = Foo(bar='x')
session.add(f)
session.flush()

# do additional queries using f.id before commit()
print f.id # should be not None

session.commit()

Но f.id None когда я пробую его. Как я могу заставить это работать?

101
задан MarredCheese 1 September 2019 в 00:28
поделиться

2 ответа

Ваш пример кода должен работать как есть. SQLAlchemy должен предоставить значение для f.id , предполагая, что это автоматически генерируемый столбец первичного ключа. Атрибуты первичного ключа заполняются сразу же в процессе flush () по мере их создания, и никакого вызова commit () не требуется. Итак, ответ здесь заключается в одном или нескольких из следующего:

  1. Детали вашего сопоставления
  2. Если есть какие-либо странные особенности используемого серверного интерфейса (например, SQLite не генерирует целочисленные значения для составного первичного key)
  3. Что сообщает сгенерированный SQL, когда вы включаете echo
56
ответ дан 24 November 2019 в 04:42
поделиться

Вам следует попробовать использовать session.save_or_update (f) вместо session.add (f) .

-7
ответ дан 24 November 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: