从Django shell执行Python脚本

我需要从Django shell执行一个Python脚本。 我试过了

./manage.py shell << my_script.py 

但它没有工作。 这只是在等我写点东西。

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

 $ ./manage.py shell < myscript.py 

你也可以这样做:

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

对于python3,你需要使用

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

你不build议在shell这样做 – 这是因为你不应该真的从django环境中执行任何脚本(但也解决方法,请参阅其他答案)。

如果这是一个脚本,你会多次运行,这是一个好主意,把它设置为自定义命令即

  $ ./manage.py my_command 

要做到这一点在你的appmanagementcommands的子目录,即创build一个文件

 my_app/ __init__.py models.py management/ __init__.py commands/ __init__.py my_command.py tests.py views.py 

并在此文件中定义您的自定义命令(确保文件的名称是要从./manage.py执行的命令的名称)

 from django.core.management.base import BaseCommand class Command(BaseCommand): def handle_noargs(self, **options): # now do the things that you want with your models here 

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

一些挖掘后,我发现这个堆栈溢出答案: 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位于同一个文件夹中)

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

 import sys, os sys.path.append('/path/to/your/django/app') os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' from django.conf import settings 

剩下的东西就到这里

从Django扩展的 runscript

 python manage.py runscript scripty.py 

一个样本script.py来testing它:

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

http://django-extensions.readthedocs.io/en/latest/command_extensions.html中提到并logging在:;

 python manage.py runscript --help 

还有一个教程 。

在Django 1.9.6上testing,django-extensions 1.6.7。

您可以使用DJANGO_SETTINGS_MODULE环境variables集运行脚本。 这就是设置Django-shell环境所需的一切。

这在Django> = 1.4中工作

如果IPython可用( pip install ipython ),那么./manage.py shell会自动使用它的shell,然后你可以使用魔术命令%run

 %run my_script.py 

请注意,此方法已被弃用的更新版本的Django的! (> 1.3)

一个替代的答案,你可以将其添加到my_script.py的顶部

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

并执行my_script.py只是python在你有settings.py的目录,但这是有点哈克。

 $ python my_script.py 
 import os, sys, django os.environ["DJANGO_SETTINGS_MODULE"] = "settings" sys.path.insert(0, os.getcwd()) django.setup() 

如果你使用的是虚拟环境,试试这个:

python manage.py shell

为了使用这些命令,你必须在虚拟环境中。 为此使用: –

workon vir_env_name

例如 :-

 dc@dc-comp-4:~/mysite$ workon jango (jango)dc@dc-comp-4:~/mysite$ python manage.py shell Python 2.7.6 (default, Mar 22 2014, 22:59:56) [GCC 4.8.2] on linux2 Type "help", "copyright", "credits" or "license" for more information. (InteractiveConsole) >>> 

注意 : – 这里mysite是我的网站名称,jango是我的虚拟环境名称

@AtulVarma提供了一个非常有用的评论,根据不被接受的答案 :

 echo 'import myscript' | python manage.py shell 

我刚发现有趣的东西是Django脚本,它允许你编写脚本以使用python manage.py runscript foobar运行。 更多关于实现和结构的信息可以在这里find, http: //django-extensions.readthedocs.org/en/latest/index.html

django.setup()似乎不工作。

似乎也不需要。

这一起工作。

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