gpt4 book ai didi

python - 在 SQLAlchemy 应用程序的单元测试中使用 Alembic?

转载 作者:行者123 更新时间:2023-12-01 03:21:10 25 4
gpt4 key购买 nike

我有一个 ORM 应用程序,它使用 SQLAlchemy、Alembic 进行迁移,使用 Pytest 进行测试。在我的测试中,我有一个数据库作为固定装置。在使用迁移之前,我曾经删除所有表并为每个测试 session 重新创建它们。

现在我正在使用迁移,我也想使用 Alembic 来创建我的装置,因为我相信它可以更接近地模拟生产环境。(这是一个很好的理由吗?)

一种方法是downgrade()一直向下,然后upgrade()每次向上。我真的不喜欢这个。我可能是错的。

另一种方法是使用 drop_all()create_all() 进行单元测试,然后编写另一个测试,用 head 标记数据库并测试 升级降级

是否有另一种好的/标准方法将迁移与固定装置集成,这样我就不必使用drop_tables

或者有没有办法在 drop_tables 之后将数据库标记为“tail”或空?如果没有明确使用修订版 0 的迁移哈希,则会导致创建依赖项,例如 alembic downgrade -1 ,这将使它回到第 0 年。谢谢。

最佳答案

我建议每次启动一个临时数据库实例,例如与 testing.mysqldtesting.postgresql 。这种方法的优点是保证您每次都能重新开始;测试的成功不取决于外部因素。缺点是启动实例需要额外的几秒钟时间。

如果您坚持使用现有的数据库实例,您可以像您所说的那样,使用create_all() + alembic stamp head。但是,不必执行 drop_all(),只需删除整个数据库(或模式,在 PostgreSQL 中)并重新创建它即可。

如果您坚持使用drop_all(),您可以删除alembic_version表来告诉alembic当前版本是“tail”。

关于python - 在 SQLAlchemy 应用程序的单元测试中使用 Alembic?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41905890/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com