我需要从Django shell中执行一个Python脚本。我试着:
./manage.py shell << my_script.py
但这并没有起作用。它只是在等我写点什么。
我需要从Django shell中执行一个Python脚本。我试着:
./manage.py shell << my_script.py
但这并没有起作用。它只是在等我写点什么。
当前回答
正如其他答案所指出但没有明确指出的那样,你实际上需要的不一定是从Django shell中执行脚本,而是在不使用Django shell的情况下访问应用程序。
这在Django版本和Django版本之间有很大不同。如果你在这篇文章中没有找到你的解决方案,答案在这里—— Django脚本访问模型对象,而不使用manage.py shell ——或者类似的搜索可能对你有帮助。
我必须以my_command.py开始
import os,sys
sys.path.append('/path/to/myproject')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.file")
import django
django.setup()
import project.app.models
#do things with my models, yay
然后运行python3 my_command.py
(Django 2.0.2)
其他回答
首先检查你的文件。
py manage.py
如果显示您的文件
[contracts]
category_load
现在您可以通过输入powershell(terminal)来运行.py文件
py manage.py category_load
如果你想执行启动脚本(例如,导入一些django模型来与它们交互工作),并保持在django shell中:
PYTHONSTARTUP=my_script.py python manage.py shell
@AtulVarma在不工作的接受答案下提供了一个非常有用的评论:
echo 'import myscript' | python manage.py shell
Django.setup()似乎不能正常工作。
似乎也不是必须的。
仅这一点就奏效了。
import os, django, glob, sys, shelve
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myProject.settings")
正如其他答案所指出但没有明确指出的那样,你实际上需要的不一定是从Django shell中执行脚本,而是在不使用Django shell的情况下访问应用程序。
这在Django版本和Django版本之间有很大不同。如果你在这篇文章中没有找到你的解决方案,答案在这里—— Django脚本访问模型对象,而不使用manage.py shell ——或者类似的搜索可能对你有帮助。
我必须以my_command.py开始
import os,sys
sys.path.append('/path/to/myproject')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.file")
import django
django.setup()
import project.app.models
#do things with my models, yay
然后运行python3 my_command.py
(Django 2.0.2)