Use Django ORM outside of Django Use Django ORM outside of Django django django

Use Django ORM outside of Django


So your question is :

I want to use Django's ORM in my scripts without running a complete Django application, how to configure it?

I'll share what I did for a project I am currently working on, using Django 2.0.2.

I suggest you create a file SetupDjangoORM.pywith :

import djangofrom django.conf import settingssettings.configure(    DATABASES={        'default': {            'ENGINE': '<your_engine>',            'NAME': '<database_name>',            'HOST': '<hostname_or_ip>',            'PORT': '<port>',            'USER': '<user>',            'PASSWORD': '<super_secret_password>',           }    },    INSTALLED_APPS=[        '<your_app>',    ])django.setup()

You can find this informations in your settings.py file.

Then, you can import this wherever you need :

from . import SetupDjangoORM

And now you are able to use Django Models (ORM) in your scripts.


You can find all the information here

This works for version 3.1 of Django

import djangofrom django.conf import settingsfrom myapp import myapp_defaultssettings.configure(default_settings=myapp_defaults, DEBUG=True)django.setup()# Now this script or any imported module can use any part of Django it needs.from myapp import models


Here's an updated version, fix was including django.setup() line and some additional settings and includes:

manage.py

import osimport sysimport djangofrom django.conf import settingsBASE_DIR = os.path.dirname(os.path.abspath(__file__))INSTALLED_APPS = [    'orm',]DATABASES = {    'default': {        'ENGINE' : 'django.db.backends.mysql',        'NAME' : 'playground',        'USER' : 'admin',        'PASSWORD' : 'pasw',        'HOST' : 'localhost',    }}settings.configure(    INSTALLED_APPS = INSTALLED_APPS,    DATABASES = DATABASES,)django.setup()if __name__ == "__main__":    from django.core.management import execute_from_command_line    execute_from_command_line(sys.argv)

And app.py:

import managefrom orm.models import Labelif __name__ == '__main__':    Label.objects.create(name='test')    print(Label.objects.get(name='test'))

Hope someone will find it useful.