Используйте Factory Boy и SqlAlchemy, чтобы заполнить мою базу данных тестовыми данными.Python

Программы на Python
Anonymous
Используйте Factory Boy и SqlAlchemy, чтобы заполнить мою базу данных тестовыми данными.

Сообщение Anonymous »

Я пытаюсь написать сценарий для заполнения базы данных фиктивными данными, но все мои попытки сделать это приводят к сбою, который, как я ожидал, обработает сеанс ORM, например, фиксация родительских записей перед попыткой фиксации дочерних записей. .
У меня есть следующие модели:

Код: Выделить всё

class Base(DeclarativeBase):
pass

class One(Base):
__tablename__ = "one"
id: Mapped[int] = mapped_column(primary_key=True)
twos: Mapped[List["Two"]] = relationship(back_populates="one")

class Two(Base):
__tablename__ = "two"
id: Mapped[int] = mapped_column(primary_key=True)
one_id: Mapped[int] = mapped_column(ForeignKey("one.id"))
one: Mapped["A"] = relationship(back_populates="twos")
и следующие фабрики:

Код: Выделить всё

class OneFactory(SQLAlchemyModelFactory):
class Meta:
model = models.One
sqlalchemy_session = db.session
id = Sequence(lambda n: n)

class TwoFactory(SQLAlchemyModelFactory):
class Meta:
model = models.Two
sqlalchemy_session = db.session

id = Sequence(lambda n: n)
one = SubFactory(OneFactory)
который я инициализирую и пытаюсь зафиксировать следующим образом:

Код: Выделить всё

one = OneFactory()
two = TwoFactory(one=one)
db.session.commit()
Который всегда завершается сбоем на дочерних ограничениях с ошибкой типа

Код: Выделить всё

Cannot add or update a child row: a foreign key constraint fails
Решения, которые я пробовал, но не сработали:
  • Код: Выделить всё

    RelatedFactoryList
    , та же проблема
  • Код: Выделить всё

    SubFactory
    , та же проблема
  • использование sqlalchemy_session_factory и sqlalchemy_session_persistence; происходит сбой из-за того, что экземпляры удерживаются в разных сеансах, или потому, что экземпляр был удален, или его строка отсутствует по иным причинам
Что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/783 ... -test-data

Вернуться в «Python»