代码之家  ›  专栏  ›  技术社区  ›  Ned Batchelder

迁移Django fixtures?

  •  19
  • Ned Batchelder  · 技术社区  · 14 年前

    我有一份Django的申请表。我有包含测试数据的.json fixture文件,以及使用数据确认应用程序正常工作的单元测试。我还使用South来迁移我的数据库。

    在执行了一些数据库迁移之后,我的fixture已经过时,因为数据库已经迁移,例如添加了一个新的数据库列,fixture数据没有该列,因为它是在数据库更改之前捕获的。

    在迁移数据库时,最好的方法是什么?

    3 回复  |  直到 13 年前
        1
  •  14
  •   Ned Batchelder    13 年前

    以下是我使用的过程:

    1. svn up -r12345 .

    2. 清空数据库,然后使用 manage.py syncdb --noinput --migrate

    3. manage.py loaddata my_fixture.json

    4. 将代码向前滚动到现在 svn up

    5. 使用迁移数据库 manage.py migrate

    6. 将数据转储为 manage.py dumpdata --indent=2 myapp >my_fixture.json

    此外,在步骤6中,请确保转储正确的应用程序集。

    将来,当我编写迁移时,我可以再次执行这些步骤以保持所有设备都是最新的。

        2
  •  1
  •   Srikar Appalaraju Tonetel    14 年前

    为什么你不能创造一个新的 .json

    python manage.py dumpdata <your_app> auth > test_data.json
    
        3
  •  -2
  •   S.Lott    14 年前

    在迁移数据库时,最好的方法是什么?

    太晚了。

    loaddata dumpdata .

    一个可能的退步是编写一个简短的脚本,将JSON fixture加载到内存中, 然后“手动”生成数据库对象。

    with open( "somefile.json", "r" ) as data:
        for obj in json.load( data ):
            if obj['model'] == 'someapp.somemodel':
                SomeNewModel.objects.create( 
                    field = obj['fields']['element']
                    ...
                    )
    

    按照这些思路,您可以使用当前模式和遗留设备构建数据库。