Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to execute external script in the Django environment

I am trying to execute an external snippet for debugging and terminal-like purposes in the environment the Django console uses so it can connect to the db, etc.

Basically, I am just using it for the same reason one would fiddle with the console but I am using longer snippets to output some formatted information so it is handy to have that code in an actual file manipulated with an IDE.

An answer said you could do that by executing python manage.py shell < snippet.py but I did not see a successfull result. And although no errors are reported, I am not getting the excepted output, but only a series of >>> prompts.

So how can I do this?

By the way, I am using PyCharm, in case this IDE has a shorthand way of doing this or any special tool.

like image 438
dabadaba Avatar asked Jan 24 '17 09:01

dabadaba


People also ask

How do I add a python file to Django project?

Just add it to the python path and thats it or is it a better way to go? If you place them in a folder you need to add a file called __init__.py to the folder. It can be empty. After that you should be able to import files from the folder.


1 Answers

I would say creating a new Custom management command is the best way to achieve this goal.

But you can run your script in a django environment. I use this sometimes to run a oneoff script or some simple tests.

You have to set the environment variable DJANGO_SETTINGS_MODULE to your settings module and then you have to call django.setup()

I copied these lines from the manage.py script, you have to set the correct settings module!

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.local")
django.setup()

Here is a simple template script which I use sometimes:

# -*- coding: utf-8 -*-
import os
import django

#  you have to set the correct path to you settings module
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project.settings.local")
django.setup()


from project.apps.bla.models import MyModel


def run():
    # do the work
    m = MyModel.objects.get(pk=1)


if __name__ == '__main__':
    run()

It is important to note that all project imports must be placed after calling django.setup().

like image 164
DanEEStar Avatar answered Oct 16 '22 12:10

DanEEStar