How to execute a Python script from the Django shell?
I need to execute a Python script from the Django shell. I tried: ./manage.py shell << my_script.py But it didn't work. It was just waiting for me to write something.
<< part is wrong, use
$ ./manage.py shell < myscript.py
You could also do:
$ ./manage.py shell ... >>> execfile('myscript.py')
For python3 you would need to use
You're not recommended to do that from the
shell - and this is intended as you shouldn't really be executing random scripts from the django environment (but there are ways around this, see the other answers).
If this is a script that you will be running multiple times, it's a good idea to set it up as a custom command ie
$ ./manage.py my_command
to do this create a file in a subdir of
commands of your
my_app/ __init__.py models.py management/ __init__.py commands/ __init__.py my_command.py tests.py views.py
and in this file define your custom command (ensuring that the name of the file is the name of the command you want to execute from
from django.core.management.base import BaseCommand class Command(BaseCommand): def handle(self, **options): # now do the things that you want with your models here
For anyone using Django 1.7+, it seems that simply import the settings module is not enough.
After some digging, I found this Stack Overflow answer: https://stackoverflow.com/a/23241093
You now need to:
import os, django os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings") django.setup() # now your code can go here...
Without doing the above, I was getting a
My script file is in the same directory as my django project (ie. in the same folder as manage.py)
I'm late for the party but I hope that my response will help someone:
You can do this in your Python script:
import sys, os sys.path.append('/path/to/your/django/app') os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' from django.conf import settings
the rest of your stuff goes here ....
runscript from django-extensions
python manage.py runscript scripty.py
script.py to test it out:
from django.contrib.auth.models import User print(User.objects.values())
Mentioned at: http://django-extensions.readthedocs.io/en/latest/command_extensions.html and documented at:
python manage.py runscript --help
Tested on Django 1.9.6, django-extensions 1.6.7.
You can just run the script with the
DJANGO_SETTINGS_MODULE environment variable set. That's all it takes to set up Django-shell environment.
This works in Django >= 1.4
@AtulVarma provided a very useful comment under the not-working accepted answer:
echo 'import myscript' | python manage.py shell
if you have not a lot commands in your script use it:
manage.py shell --command="import django; print(django.__version__)"
As other answers indicate but don't explicitly state, what you may actually need is not necessarily to execute your script from the Django shell, but to access your apps without using the Django shell.
This differs a lot Django version to Django version. If you do not find your solution on this thread, answers here --
Django script to access model objects without using manage.py shell
-- or similar searches may help you.
I had to begin my_command.py with
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
and then ran
import os, sys, django os.environ["DJANGO_SETTINGS_MODULE"] = "settings" sys.path.insert(0, os.getcwd()) django.setup()
Note, this method has been deprecated for more recent versions of django! (> 1.3)
An alternative answer, you could add this to the top of
from django.core.management import setup_environ import settings setup_environ(settings)
my_script.py just with python in the directory where you have
settings.py but this is a bit hacky.
$ python my_script.py
Try this if you are using virtual enviroment :-
python manage.py shell
for using those command you must be inside virtual enviroment. for this use :-
for example :-
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) >>>
Note :- Here mysite is my website name and jango is my virtual enviroment name
If you want to run in in BG even better:
nohup echo 'exec(open("my_script.py").read())' | python manage.py shell &
The output will be in
- Database Administration Tutorials
- Programming Tutorials & IT News
- Linux & DevOps World
- Entertainment & General News
- Games & eSport