Ben RR Ben RR - 25 days ago 10
Python Question

Django Standalone Script

I am trying to access my Django (v1.10) app DB from another python script and having some trouble doing so.

This is my file and folder structure:

store
store
__init.py__
settings.py
urls.py
wsgi.py
store_app
__init.py__
admin.py
apps.py
models.py
...
db.sqlite3
manage.py

other_script.py


In accordance with Django's documentations my
other_script.py
looks like this:

import django
from django.conf import settings

settings.configure(DEBUG=True)
django.setup()

from store.store_app.models import MyModel


But it generates a runtime error:

RunTimeError: Model class store.store_app.models.MyModel doesn't declare an explicit app_label and isn't in an application in INSTALLED_APPS.


I should note that my
INSTALLED_APPS
list contains
store_app
as its last element.

If instead I try to pass a config like this:

import django
from django.conf import settings
from store.store_app.apps import StoreAppConfig

settings.configure(StoreAppConfig, DEBUG=True)
django.setup()

from store.store_app.models import MyModel


I get:

AttributeError: type object 'StoreAppConfig has no attribute 'LOGGING_CONFIG'.


If I edit
settings.py
and add
LOGGING_CONFIG=None
I get another error about another missing attribute, and so on.

Any suggestions will be appreciated.

Answer Source

Try this

import sys, os, django
sys.path.append("/path/to/store") #here store is root folder(means parent).
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "store.settings")
django.setup()

from store_app.models import MyModel

This script you can use anywhere in your system.