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