首页 > 解决方案 > 模型更改后如何进行bulk_inserts

问题描述

每当我们开始一组新的测试时,我们都会在我们的 pytest 框架中使用 alembic 来生成一个新的测试数据库。这在一段时间内运行良好,直到我们更改了表中的一列并破坏了我们的测试。

如果我们从头开始创建一个新环境,同样的问题也会发生。

该过程如下所示:

  1. 开发人员创建了一个新的 SQLAlchemy 模型。
  2. Alembic 在数据库中创建表。
  3. Alembic 使用op.bulk_insert将一些数据加载到该新表中。
  4. 开发人员更新了 SQLAlchemy 模型。
  5. Alembic 应用表更改。
  6. Alembic 使用op.bulk_insert.

问题是如果我现在返回并从步骤 (2) 开始,因为我正在构建新环境或运行测试,当 bulk_insert 在步骤 (3) 中运行时,它在我们的源代码中使用的sqlalchemy 模型,这会导致它失败了。

我想一个丑陋的解决方案是在当前分支中保留模型的每个变体的副本,然后让相关bulk_insert迁移在运行时使用适当的模型变体。(可能通过返回并修改所有旧迁移以从存档文件夹导入。)

有没有更优雅的方式来使用 (2) 和 (3) 中找到的原始表布局和原始数据集进行 bulk_insert,而不在我们的源代码中保留一堆旧模型版本?

标签: pythonsqlalchemyalembic

解决方案


推荐阅读