从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
要做到这一点在你的app
的management
和commands
的子目录,即创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")