Ich habe eine schöne Datenbank, die ich in Django erstellt habe, und ich möchte über einige Python-Skripte außerhalb meiner Website eine Schnittstelle herstellen. Daher bin ich gespannt, ob es möglich ist, die Django-Datenbank-API außerhalb eines Django zu verwenden Website, und wenn ja, hat jemand Informationen darüber, wie es gemacht werden kann? Google hat dafür nicht viele Treffer erzielt.
73
settings.py
mit all dem zu importieren , was bereits im Projekt vorhanden ist?Für Django 1.7 habe ich Folgendes verwendet, um den Betrieb aufzunehmen.
settings.py:
from django.conf import settings settings.configure( DATABASES={ 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'name', 'USER': 'usr', 'PASSWORD': 'secret', 'HOST': '127.0.0.1', 'PORT': '5432', }, }, TIME_ZONE='America/Montreal', )
In der Datei, die die Startroutine enthält
import os import django import v10consolidator.settings from myapp.models import * os.environ.setdefault( "DJANGO_SETTINGS_MODULE", "myapp.settings" ) django.setup()
quelle
Das Update setup_environ soll in django 1.6 entfernt werden
Wenn Sie in der Lage sind , Ihre settings.py - Datei zu importieren, dann werfen Sie einen Blick auf praktisch setup_environ Befehl.
from django.core.management import setup_environ from mysite import settings setup_environ(settings) #here you can do everything you could in your project
quelle
Eine letzte Option, die niemand erwähnt hat: ein benutzerdefinierter
./manage.py
Unterbefehl .quelle
Hier ist der Code, den ich benutze. Ersetzen
your_project
Sie einfach durch Ihren Django-Projektnamen,yourApp
durch Ihren Django-App-Namen,any_model
durch das Modell, das Sie in der Modelldatei verwenden möchten, undany_fild
durch das Feld, das Sie aus der Datenbank erhalten möchten:from django.conf import settings import django from your_project.settings import DATABASES, INSTALLED_APPS settings.configure(DATABASES=DATABASES, INSTALLED_APPS=INSTALLED_APPS) django.setup() from yourApp.models import * print(any_model.objects.all()[0].any_fild)
quelle
Ich suchte nach Antworten für Django 3.0 und keine der oben genannten Methoden funktionierte genau für mich.
Ich habe die offiziellen Dokumente unter https://docs.djangoproject.com/de/3.0/topics/settings/ gelesen und diese Skripte haben für mich funktioniert.
Mein Skript db_tasks.py befindet sich so auf meiner Site.
mysite mysite db.sqlite3 db_tasks.py manage.py polls
import os import django os.environ['DJANGO_SETTINGS_MODULE'] = 'dashboard.settings' django.setup() from polls.models import Question print(Question.objects.all()) out: <QuerySet [<Question: WTU?]>
quelle
Für die Verwendung von Django ORM aus anderen Anwendungen benötigen Sie:
1)
export DJANGO_SETTINGS_MODULE=dproj.settings
2) Fügen Sie Ihren Django-App-Ordner zum Pfad hinzu (Sie können dies im Code Ihrer Nicht-Django-App tun):
sys.path = sys.path + ['/path/to/your/app/']
3) Wenn Sie SQLite verwenden, verwenden Sie den vollständigen Pfad zur Datenbankdatei in settings.py:
DATABASE_NAME = '/path/to/your/app/base.db'
quelle
Für Django 1.5 on (mehrere Datenbanken werden unterstützt) wurden auch die DATABASE-Einstellungen geändert. Sie müssen die vorherige Antwort anpassen, um ...
settings.configure( DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'db_name', 'USER': 'db_usr', 'PASSWORD': 'db_pass', 'HOST': '', 'PORT': '', }, }, TIME_ZONE = 'Europe/Luxembourg' )
quelle
import os, sys BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.settings") sys.path.append(os.path.abspath(os.path.join(BASE_DIR, os.pardir))) from django.core.wsgi import get_wsgi_application application = get_wsgi_application() from app.models import MyModel
quelle
Basierend auf der Antwort von Hai Hu ist hier ein Arbeitsskript, das auf Django 1.10 und 1.11 getestet wurde. Ich importiere zuerst die Basis-Apps von Django, weil sie in vielen anderen Apps benötigt werden.
import os from django.conf import settings from django.apps import apps conf = { 'INSTALLED_APPS': [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.messages', 'django.contrib.sessions', 'django.contrib.sitemaps', 'django.contrib.sites', 'django.contrib.staticfiles', '<your_app>', ], 'DATABASES': { 'default': { 'ENGINE': os.environ.get('DB_ENGINE'), 'NAME': os.environ.get('DB_NAME'), 'USER': os.environ.get('DB_USER'), 'PASSWORD': os.environ.get('DB_PASSWORD'), 'HOST': os.environ.get('DB_HOST'), 'PORT': os.environ.get('DB_PORT'), } }, 'TIME_ZONE': 'UTC' } settings.configure(**conf) apps.populate(settings.INSTALLED_APPS) <import your app models here>
quelle