我有一个Django应用程序。我有包含测试数据的.json fixture文件,其中的单元测试使用这些数据来确认应用程序是否正常工作。我还使用South迁移我的数据库。
在进行了几次数据库迁移之后,我的fixture已经过时了,因为数据库已经迁移了,例如,添加了一个新的数据库列,而fixture数据没有该列,因为它是在数据库更改之前捕获的。
在迁移数据库时,向前移动fixture的最佳方式是什么?
发布于 2010-10-24 01:09:12
下面是我使用的过程:
svn up -r12345.manage.py syncdb --noinput --migratemanage.py loaddata my_fixture.jsonsvn upmanage.py migratemanage.py dumpdata --indent=2 myapp >my_fixture.json请注意,在选择要回滚到的过去版本时需要小心。在我的例子中,我有一些最近的修复需要到位,所以我实际上必须挑选目录来回滚到特定的修订。这很乏味,但比手工编辑一个9000行的JSON文件要好。
此外,在步骤6中,请确保转储正确的应用程序集。
将来,当我编写迁移时,我可以再次执行这些步骤,以使所有的fixture保持最新。
发布于 2010-10-23 12:28:08
为什么你不能简单地从你的数据库中创建一个新的.json文件。这就是我需要创建新夹具时所做的事情。
python manage.py dumpdata <your_app> auth > test_data.json发布于 2010-10-23 11:32:11
在迁移数据库时,向前移动装置的最佳方式是什么?
太晚了。
在迁移数据库时,您需要使用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']
...
)有了这些东西,您也许能够使用当前的模式和遗留fixture来构建数据库。
https://stackoverflow.com/questions/4002322
复制相似问题