0

基本上我正在编写一个脚本来完全重置 django webapp。在这个脚本中,我想重置数据库,并且有一个命令可以从 django 扩展中执行。不幸的是,我无法以编程方式运行它。当我通过命令行运行它时它工作正常,但当我以编程方式尝试时它不会执行。

我尝试过使用 os.system 和子进程。

我也尝试过使用 management.call_command('reset_db'),但它一直说没有一个名为 reset_db 的命令。我已经检查以确保 django_extensions 在我安装的应用程序中,所以我不知道为什么它不起作用。

有谁知道我该如何解决这个问题?谢谢!

我也在使用python3,我相信是最新版本的django,它是我试图删除的MYSQL服务器。

4

1 回答 1

0

如果不直接看到您的调用方式,我无法知道,但我的猜测是脚本没有在 virtualenv 中运行。以下是一些调试说明:

./manage.py --help | grep reset_db: 这有什么输出吗?

./manage.py shell_plus

然后尝试:

  • from django.core.management import call_command
  • call_command('reset_db', '--help')

那有什么吗?

也在里面./manage.py shell_plus,试试import django_extensions

在外壳之外,试试这个:pip show django, pip django-extensions.

如果它没有显示那些(例如WARNING: Package(s) not found: django-extension)并且您认为它们已经安装,请尝试以下操作:

which python, which pip. 你在用venv, virtualenv, virtualenvwrapper, pipenvor诗歌吗?

试试看env | grep VIRT,你看到了VIRTUAL_ENV吗?如果没有,您可能需要制作一个。

运行脚本时,您需要设置环境变量,以便连接到您的站点包。在poetry我们可以做poetry run ./manage.py ourscriptpoetry run ./ourscript.py不需要采购。但是我们也可以很容易地通过poetry shell.

如果您创建了类似的环境virtualenv -ppython3.8 .venv,您可以执行以下操作:

source .venv/bin/activate, ./myscript.py, rr 你可以试试.venv/bin/python ./myscript.py

于 2021-11-10T20:57:17.780 回答