我在数据迁移方面遇到问题,真的希望我可以在问题点上放置一个断点并检查对象。有没有办法通过 PyCharm 来完成这个?
如果没有,有没有其他方法可以做到这一点?
如果没有,调试南迁移的最佳方法是什么?
是的,您可以在 PyCharm 中做到这一点。你需要create Django server run configuration.
使用您的南迁移命令指定自定义运行命令,然后只需按下调试按钮(在您希望调试器停止的地方放置断点之前)。
正如 Dmitry 提到的,可以在 PyCharm 中运行迁移命令并对其进行调试。 命令是
python manage.py migrate <name of your Django app> <name of the migration>
,例如python manage.py migrate projects 0007_auto_20220407_1105.py
.
在许多情况下,您甚至不需要断点,只需确保将调试器配置为在出现异常时中断即可。 这是它在 VS Code 中的样子(很抱歉这次没有使用 PyCharm,我交替使用它们):
您可以在
sql
变量中看到错误的 SQL,您可以在调用堆栈树中向上移动到 apply
函数并查看是哪个 operation
导致了这个问题:
TL;博士;调试任何具有数据库访问权限的测试。适用于任何迁移,而不仅仅是 Django South。
长答案:
有没有想过为什么在运行测试时,您会看到以下消息?
Creating test database for alias 'default'
在
pytest
的情况下,这是允许数据库访问的以下行的结果:
import pytest
@pytest.mark.django_db # <-- This line
def test_my_user():
me = User.objects.get(username='me')
assert me.is_superuser
Pytest 然后会给你一个超级新的数据库,其中包含该测试的所有表。它通过在一个全新的一次性数据库上运行所有迁移来做到这一点。
默认实现通过应用迁移创建测试数据库,并在测试运行后删除数据库。
(取自
pytest-django
的文档)
一种方式,更简单(如果你已经具备调试测试的能力)
根据我的研究,这也适用于
unittest
.