首先,我厌倦了这个:
\n@pytest.mark.django_db\n@pytest.fixture(scope='session')\ndef created_user(django_db_blocker):\n with django_db_blocker.unblock():\n return CustomUser.objects.create_user("User", "UserPassword")\n\ndef test_api_create(created_user):\n user = created_user()\n assert user is not None\nRun Code Online (Sandbox Code Playgroud)\n但我得到了一个UndefinedTable错误。因此,以某种方式标记我的装置并@pytest.mark.django_db没有\xe2\x80\x99t 实际上注册了我的 Django DB。接下来我尝试将 db 对象直接传递给固定装置:
@pytest.fixture(scope='session')\ndef created_user(db, django_db_blocker):\n with django_db_blocker.unblock():\n return CustomUser.objects.create_user("User", "UserPassword")\n\ndef test_api_create(created_user):\n user = created_user()\n assert user is not None\nRun Code Online (Sandbox Code Playgroud)\n但后来我得到了一个错误
\nScopeMismatch: You tried to access the 'function' scoped fixture 'db' with a 'session' scoped request object, involved factories\nRun Code Online (Sandbox Code Playgroud)\n最后,为了确认一切正常,我尝试了:
\n@pytest.fixture\ndef created_user(db, django_db_blocker):\n with django_db_blocker.unblock():\n return CustomUser.objects.create_user("User", "UserPassword")\n\ndef test_api_create(created_user):\n …Run Code Online (Sandbox Code Playgroud) 我正在使用“ manage.py测试”以及使用“ dumpdata”创建的JSON夹具
我的问题是装置中的几个表非常大(例如,其中包含美国所有城市的名称),这使得测试运行非常缓慢。
鉴于程序中永远不会修改其中的几个表(例如,永远不需要修改城市名称),因此对于每次测试运行创建和删除这些表都没有多大意义。
有没有更好的方法可以使用这种数据测试此代码?
Django n00b在这里.我想知道,django是一种可靠的方式来备份我的数据,而不是实际备份数据库吗?如果我的数据库非常大怎么办?
谢谢.
我通过 dumpdata 保存了一堆装置,这里是一个例子:
[
{
"pk": 1,
"model": "core.question",
"fields": {
"text": "\u041a\u0430\u043a\u0438\u0445 \u0436\u0438\u0432\u043e\u0442\u043d\u044b\u0445 \u0432\u044b \u0434\u0435\u0440\u0436\u0438\u0442\u0435 \u0434\u043e\u043c\u0430",
"is_free_text": false
}
},
{
"pk": 2,
"model": "core.question",
"fields": {
"text": "\u0415\u0434\u0438\u0442\u0435 \u043b\u0438 \u0432\u044b \u043c\u044f\u0441\u043e?",
"is_free_text": false
}
},
{
"pk": 3,
"model": "core.question",
"fields": {
"text": "\u041a\u0430\u043a\u043e\u0439 \u0435\u043d\u043e\u0442 \u0436\u0438\u0432\u0435\u0442 \u0443 \u0432\u0430\u0441 \u0434\u043e\u043c\u0430",
"is_free_text": false
}
}
]
Run Code Online (Sandbox Code Playgroud)
当我做
manage.py loaddata core_question.json
,出现以下错误:
警告:不正确的字符串值:'\xD0\x94\xD0\xB8\xD0\xB0...' 列 'first_name' 在第 1 行
我虽然它可能是数据库的东西,但它似乎都是 unicode:
character_set_client,utf8
character_set_connection,utf8
character_set_database,utf8
character_set_filesystem,binary
character_set_results,utf8
character_set_server,utf8
character_set_system,utf8
character_sets_dir,/usr/share/mysql/charsets/
Run Code Online (Sandbox Code Playgroud)
以及模式整理:
CATALOG_NAME,SCHEMA_NAME,DEFAULT_CHARACTER_SET_NAME,DEFAULT_COLLATION_NAME,SQL_PATH NULL,reviewer,utf8,utf8_general_ci,NULL …
我希望使用此处描述的装置加载初始数据
https://docs.djangoproject.com/en/dev/howto/initial-data/
对于小数据集来说这很容易。但是我希望加载一个无法装入内存的大 CSV。我该如何将其序列化为大型 JSON 格式?我是否必须通过手动编写开头“[”和结尾“]”来破解它,或者是否有更清洁的方法可以做到这一点?
如何使用数据装置(或其他序列化记录)中的记录更新已填充的 Django 数据库?
\n我知道我可以使用 Django数据装置来提供初始数据。我可以使用相同的已编写功能从数据固定装置(或类似的序列化数据,如 JSON 文档)更新数据库吗?
\n\xe2\x80\x9cinsert 或从序列化 data\xe2\x80\x9d 操作更新应该是幂等的:
\n具体来说,我可以通过指定pk=null和使用自然键来更新现有行吗?
如何使用现有的 Django \xe2\x80\x9cload data\xe2\x80\x9d 功能(无论是loaddataDjango 中的其他功能)来读取序列化数据,如果记录不存在则插入记录,如果记录存在则更新记录已经存在?
如何在Django单元测试中使用GenericRelations?
我已经阅读并尝试了无数互联网上的建议,但无济于事。
这是在Django中加载固定装置时很有希望的Contenttypes问题
但是Django 1.6中不再存在“重置”命令
我的项目将GenericForeign键用于ContentType,并将外键用于auth.Users。我使用--natural选项仅转储了我应用程序的数据,但这导致了测试数据库中不存在用户的问题。现在,我删除了--natural选项,而是转储了所有3个应用程序myApp,auth,contenttypes的数据。运行测试时,我得到“无法加载contenttypes.ContentType(pk = 50):列app_label,模型不是唯一的”。我认为这是由于在导入模型时动态创建了contenttypes。
使用的命令:
python manage.py dumpdata auth myApp contenttypes --natural --indent=4 > auhtmtmnatural.json
Run Code Online (Sandbox Code Playgroud)
接下来,我转储了myApp,保留了内容类型的身份验证。我认为,由于ContentTypes应用程序数据库是动态创建的,而且我的装置具有自然键,因此应该可以使用。没有。
现在我得到:
DeserializationError: Problem installing fixture 'auhtmtmnatural.json': ContentType matching query does not exist.
Run Code Online (Sandbox Code Playgroud)
如何获得具有原型的Fixutres?在测试中使用安装程序和创建对象更好吗?
我有一个包含 3 个模型的应用程序,这些模型以父子方式相互引用:
class A(Model):
# ...
class B(Model):
a = ForeignKey(A)
# ...
class C(Model):
b = ForeignKey(B)
# ...
Run Code Online (Sandbox Code Playgroud)
在我的生产数据库中,我有数百个 A 类型的对象,其下面有数千个子对象。我现在只想为少数(特定)对象创建一个固定装置。如果我运行这个命令,我的输出将变得巨大:
python manage.py dumpdata ca_myapp -o /tmp/my_app_dump.json
Run Code Online (Sandbox Code Playgroud)
但是,当我使用此命令限制输出时:
python manage.py dumpdata ca_myapp.A -o /tmp/myapp_dump.json --pks pk1, pk2, pk3
Run Code Online (Sandbox Code Playgroud)
然后只有 A 对象被反序列化,而不是它们的子对象。如何轻松创建包含少量对象及其子对象的夹具文件?
我正在尝试使用 Django dumpdata 和 loaddata 命令将数据从 QA 服务器移动到生产环境(或 dev->local、qa->dev 等)。我已经成功导出了没有外部依赖项的内容,如下所示:
python manage.py dumpdata --natural-foreign --indent=4 snippets.somemodel
当尝试迁移内容较多的模型(带有附加的用户、文档、图像等内容)时,我收到很多外键抱怨。这是特别有问题的,因为用户、文档、图像在所有环境中都是不同的。我希望能够只移动内容并忽略依赖于外键的内容 - 这可能吗?
我有一个中央 Django 服务器,其中包含数据库中的所有信息。我想要第二个 Django 服务器,其中包含第二个数据库中该信息的子集。我需要一种万无一失的方法来有选择地在两者之间同步数据。
我正在考虑使用 TimeStampedModel (来自 django-extensions)或添加我自己的 DateTimeField(auto_now=True) ,以便每个对象都存储其最后修改时间。然后,也许有一种机制可以将数据从一个数据库转储并将其加载到另一个数据库中,以便仅保留最近修改的对象。
我正在考虑的可能性是 django 的 dumpdata、django-extensions dumpscript、django-test-utils makefixture 或者 django-fixture magic。有很多事情需要考虑,所以我不确定该走哪条路。
django-fixtures ×10
django ×8
database ×2
fixtures ×2
django-tests ×1
mysql ×1
pytest ×1
python ×1
unicode ×1
wagtail ×1