迁移Django灯具?

时间:2010-10-23 03:29:29

标签: django migration fixtures django-south

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

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

迁移数据库时,移动我的灯具的最佳方法是什么?

3 个答案:

答案 0 :(得分:13)

以下是我使用的流程:

  1. 首先将代码回滚到创建夹具的修订版。例如:svn up -r12345

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

  3. 创建数据库
  4. 使用manage.py loaddata my_fixture.json

  5. 加载灯具
  6. 使用svn up

  7. 将代码推进到现在
  8. 使用manage.py migrate

  9. 迁移数据库
  10. 使用manage.py dumpdata --indent=2 myapp >my_fixture.json

  11. 转储数据

    请注意,在选择要回滚的过去修订时需要小心。在我的情况下,我有一些最近的修复需要到位,所以我实际上必须选择目录以回滚到特定的修订。单调,但比手动编辑9,000行JSON文件更好。

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

    将来,在我编写迁移时,我可以再次执行这些步骤,以使所有灯具保持最新状态。

答案 1 :(得分:1)

为什么不能简单地从数据库创建一个新的.json文件。当我需要创建一个新夹具时,这就是我所做的。

python manage.py dumpdata <your_app> auth > test_data.json

答案 2 :(得分:-2)

  

迁移数据库时,移动我的灯具的最佳方法是什么?

已经太晚了。

迁移数据库时,您需要loaddatadumpdata

一个人停止工作,为时已晚。

可能的后备是编写一个简短的脚本来将JSON装置加载到内存中, 然后“手动”构建数据库对象。

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']
                ...
                )

根据这些内容,您可以使用当前架构和传统夹具构建数据库。