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

./manage.py shell << my_script.py

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


当前回答

import os, sys, django
os.environ["DJANGO_SETTINGS_MODULE"] = "settings"
sys.path.insert(0, os.getcwd())

django.setup()

其他回答

注意,这个方法在django的最新版本中已经被弃用了!(> 1.3)

另一个答案是,您可以将它添加到my_script.py的顶部

from django.core.management import setup_environ
import settings
setup_environ(settings)

然后用python在settings。py目录下执行my_script.py,但这有点棘手。

$ python my_script.py

<<部分是错误的,用<代替:

$ ./manage.py shell < myscript.py

你还可以:

$ ./manage.py shell
...
>>> execfile('myscript.py')

对于python3,您需要使用

>>> exec(open('myscript.py').read())

将globals().update(locals())放在import语句之后

从django-extensions运行脚本

python manage.py runscript scripty.py

一个示例script.py来测试它:

from django.contrib.auth.models import User
print(User.objects.values())

提及地址:http://django-extensions.readthedocs.io/en/latest/command_extensions.html,记录地址:

python manage.py runscript --help

还有一个教程。

在Django 1.9.6和Django -extensions 1.6.7上测试。

如果你的脚本中没有很多命令,使用它:

manage.py shell --command="import django; print(django.__version__)"

Django文档在manage.py shell上