【问题标题】:Having trouble running the django extensions command reset_db programatically以编程方式运行 django 扩展命令 reset_db 时遇到问题
【发布时间】:2021-06-28 19:10:06
【问题描述】:

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

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

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

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

我也在使用 python3,我认为是 django 的最新版本,它是我正在尝试删除的 MYSQL 服务器。

【问题讨论】:

    标签: python-3.x django django-extensions


    【解决方案1】:

    如果不直接查看您的调用方式,我无法知道,但我的猜测是脚本没有在 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

    在 shell 之外,试试这个:pip show djangopip django-extensions

    如果它没有显示那些(例如WARNING: Package(s) not found: django-extension)并且你认为它们已经安装,试试这个:

    which pythonwhich pip。你在用venvvirtualenvvirtualenvwrapper, pipenvorpoetry`吗?

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

    当您运行脚本时,您需要设置环境变量,以便连接到您的站点包。在poetry 我们可以做poetry run ./manage.py ourscriptpoetry run ./ourscript.py 而无需采购。但是我们也可以通过poetry shell轻松进入virtualenv。

    如果您创建了类似virtualenv -ppython3.8 .venv 的环境,您可以这样做:

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

    【讨论】:

      猜你喜欢
      • 2013-07-16
      • 1970-01-01
      • 2017-02-23
      • 2017-05-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      相关资源
      最近更新 更多