Der Django-ORM kann auch nützlich sein für Anwendungen, die zwar mit einer Datenbank, aber nicht mit
einem Web-Framework arbeiten sollen, und manchmal möchte man auch ein einem Programm mit einer von
Django verwalteten Datenbank arbeiten, ohne die gesamte Django-Umgebung zu aktivieren (und vielleicht
kommt die Lösung, das Programm als Management-Kommando laufen zu lassen, aus irgendwelchen Gründen
nicht in Frage).
Es ist durchaus möglich, lediglich den ORM zu aktivieren, ohne URLs, Views, komplette Settings usw.
einzurichten. Ein Blogpost zeigt eine einfache
Möglichkeit auf, in wenigen Zeilen alles einzurichten, was für den ORM benötigt wird:
#!/usr/bin/env python3
def init_django():
import django
from django.conf import settings
if not settings.configured:
settings.configure(
INSTALLED_APPS=["db"],
DATABASES={
"default": {
"ENGINE": "django.db.backends.postgresql", "NAME": …
}
}
)
django.setup()
if __name__ == "__main__":
from django.core.management import execute_from_command_line
init_django()
execute_from_command_line()
Im Modul db/models.py stehen dann die Klassendefinitionen für die Models:
from django.db import models
from manage import init_django # oder ggf. "from ..manage …"
init_django()
class MyModel(models.Model):
…
Es geht noch kürzer:
import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'project.settings')
django.setup()
In dieser Variante stehen die Settings in einem eigenen Modul project/settings.py, brauchen
aber natürlich auch nur das Allernötigste zu umfassen (siehe oben: INSTALLED_APPS und
DATABASES).
Wie man's auch macht – man hat dann eine Anwendung, die man leicht nachträglich zu einer vollständigen
Web-App aufbohren kann.