在运行Django测试之前,加载SQL转储

问题描述 投票:0回答:2

Django在执行syncdb,重置或启动测试跑者时支持加载sql文件 - 这确实做到了:

http://docs.djangoproject.com/en/dev/howto/initial-data/#providing-initial-sql-data

您需要在应用程序目录中创建一个“ SQL”目录,然后在该目录中放置一个名为“ mymodel.sql”的文件(其中“ mymodel”是相应的模型名称)。

myproject/ |--myapp/ |--sql/ |--mymodel.sql
python django django-testing
2个回答
8
投票

sqlite [1]:回声'.dump'| sqlite3 yourdbname.sqlite> myApp/sql/mymodel.sql

Mysql[2]:mySqlDump yourdbname> myApp/sql/mymodel.sql postgresql [3]:pg_dump yourdbname> myApp/sql/mymodel.sql

倾倒后,您需要编辑文件以删除除适当的插入语句或其他复杂内容以外的所有内容。 特别是,您必须删除交易处理,索引创建和表创建SQL,以避免加载重复创建语句时错误。
我使用此方法来真正非常大的固定装置 - 处理JSON花费太长时间了,但是直接的SQL导入非常活跃。  
请注意,此方法还将加载SQL,以调用SynchDB,Reset等。除了为测试跑步者加载数据外,您将无法为不同的测试用例提供不同的数据,并且如果您不希望它们加载到生产服务器上,则必须在重置之前删除文件。

[1]

http://www.sqlite.org/sqlite.html
  • [2]
  • http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html
  • [3]
http://www.postgresql.org/docs/8.1/static/backup.html#backup-dump

您可能需要考虑定义自定义测试跑步者。这里有一些信息:

https://docs.djangoproject.com/en/dev/topics/testing/advanced/#other-testing-frameworks

我认为您可以从django.test.simple.run_tests复制默认的测试跑者,然后对其进行修改以适合您的需求。 我以前没有这样做,但是从我的理解来看,这将是自定义的方法。

如果使用固定装置是不可行的,那么您可以将

django.db.migrations.RunSQL操作添加到现有或新的迁移文件,而SQL作为参数。 按照此方法遵循的新迁移文件看起来像:

from django.db import migrations class Migration(migrations.Migration): dependencies = [ ("sample", "0001_initial_migration"), ] operations = [ migrations.RunSQL( open("/path/to/sql/file.sql").read(), ), ] 如果您不希望在迁移现有安装时运行

RunSQL

1
投票

fixtures是最佳选择。您是否尝试过使用./manage.py dumpdata来创建当前数据库的固定装置?我还没有看到在复杂模型上失败,但我想这是可能的。 填写您正在使用mysql,您应该能够使用mysqldump

.

来脚本脚本。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.