我需要从Django shell中执行一个Python脚本。我试着:

./manage.py shell << my_script.py

但这并没有起作用。它只是在等我写点什么。


当前回答

Django.setup()似乎不能正常工作。

似乎也不是必须的。

仅这一点就奏效了。

import os, django, glob, sys, shelve
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myProject.settings")

其他回答

对于使用Django 1.7+的人来说,仅仅导入设置模块似乎是不够的。

经过一番挖掘,我找到了这个Stack Overflow的答案:https://stackoverflow.com/a/23241093

你现在需要:

import os, django
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
django.setup()
# now your code can go here...

没有做上面的事情,我得到了一个django.core.exceptions.AppRegistryNoReady错误。

我的脚本文件是在相同的目录,我的django项目(即。和manage.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)

你可以使用DJANGO_SETTINGS_MODULE环境变量来运行脚本。这就是设置Django-shell环境所需的全部内容。

这在Django >= 1.4中是有效的

我迟到了,但我希望我的回答能帮助到别人:你可以在你的Python脚本中这样做:

步骤1:导入

import mysite.asgi

step2:需要执行一个Python脚本,只需输入:

python test.py

test.py文件是这样的:

import mysite.asgi

from polls.models import GMD_TABLE
print ( [obj.gt_GMD_name for obj in GMD_TABLE.objects.all()] )

最后:结果将是:

['ISHWARDI', 'JHENAIDHA', 'HVDC CIRCLE']

GMD_TABLE的值['ISHWARDI', 'JHENAIDHA', 'HVDC CIRCLE']在哪里

另一种方式是执行这个

echo 'execfile("/path_to/myscript.py")' | python manage.py shell --settings=config.base

它在Python2.7和Django1.9上运行