首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迁移Django fixture?

迁移Django fixture?
EN

Stack Overflow用户
提问于 2010-10-23 11:29:29
回答 3查看 5.9K关注 0票数 20

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

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

在迁移数据库时,向前移动fixture的最佳方式是什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-24 01:09:12

下面是我使用的过程:

  1. 将代码回滚到最初创建夹具的修订版本。例如:svn up -r12345.
  2. Empty数据库,然后用manage.py syncdb --noinput --migrate
  3. Load创建它用manage.py loaddata my_fixture.json
  4. Roll编写代码到现在,用svn up
  5. Migrate创建数据库用manage.py migrate
  6. Dump创建数据用manage.py dumpdata --indent=2 myapp >my_fixture.json

请注意,在选择要回滚到的过去版本时需要小心。在我的例子中,我有一些最近的修复需要到位,所以我实际上必须挑选目录来回滚到特定的修订。这很乏味,但比手工编辑一个9000行的JSON文件要好。

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

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

票数 15
EN

Stack Overflow用户

发布于 2010-10-23 12:28:08

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

代码语言:javascript
复制
python manage.py dumpdata <your_app> auth > test_data.json
票数 1
EN

Stack Overflow用户

发布于 2010-10-23 11:32:11

在迁移数据库时,向前移动装置的最佳方式是什么?

太晚了。

在迁移数据库时,您需要使用loaddatadumpdata

一旦它停止工作,就太晚了。

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

代码语言:javascript
复制
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']
                ...
                )

有了这些东西,您也许能够使用当前的模式和遗留fixture来构建数据库。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4002322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档