2016-09-27 2 views
10

Ich versuche, von einem anderen Python-Skript auf meine Django (v1.10) -App-Datenbank zuzugreifen und habe dabei einige Probleme.Django Standalone-Skript

Das ist mein Datei- und Ordnerstruktur:

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 

Gemäß Django's documentations meine other_script.py sieht wie folgt aus:

import django 
from django.conf import settings 

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

from store.store_app.models import MyModel 

Aber es erzeugt einen Laufzeitfehler:

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

Ich sollte beachten, dass meine INSTALLED_APPS Liste enthält store_app als sein letztes Element.

Wenn stattdessen versuche ich eine Config wie folgt weitergeben müssen:

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 

ich:

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

Wenn ich settings.py bearbeiten und hinzufügen LOGGING_CONFIG=None ich einen anderen Fehler zu einem anderen fehlt Attribut erhalten, und so auf.

Alle Vorschläge werden geschätzt.

+0

verwendet es eine virtuelle Umgebung? – FeedTheWeb

+0

@lxer: nein, es ist nicht –

+0

der Rest Ihrer Django App funktioniert ohne virtuelles env? Noch eine Frage: Was passiert, wenn Sie das Skript direkt starten? ('python yescript.py') – FeedTheWeb

Antwort

16

Versuchen Sie, diese

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 

Dieses Skript, das Sie überall in Ihrem System verwenden können.

+0

Großartig! Hinweis: Ich musste "store.store.settings" verwenden, damit es funktioniert. –

0

versuchen, von store_app.models zu importieren - wie die umliegenden store Ordner ist kein Python-Modul und sollte nicht beim Importieren verwendet werden.

update: ich habe gerade bemerkt, dass Sie dieses Skript neben Ihrem Projektordner - Sie sollten es bewegen, damit dies funktioniert.

+0

Kann mein_script nicht in einem anderen Paket sein? –

+0

kann es, aber es hängt von Ihrem Weg ab - ein Django-Projekt ist normalerweise nicht im Pfad, deshalb riet ich Ihnen, es zu verschieben. Trotzdem - wenn du nicht neben Django rennen solltest, solltest du den Weg gehen @Withnail erwähnt. – dahrens

8

Das klingt nach einem großen Anwendungsfall für Django Management commands., die den zusätzlichen Bonus hat, können Sie es von Cron, direkt von der Befehlszeile geplant, oder Anruf von innen Django. Dadurch erhält das Skript vollen Zugriff auf dieselben Einstellungen und Umgebungsvariablen wie Ihr Hauptprojekt.

Wenn Sie dies in ein geeignetes Verzeichnis verschieben - mit Speicher hier als Beispiel, kein Vorschlag, sollte es funktionieren.

store 
    management 
    __init__.py 
     commands 
     __init__.py 
     otherscript.py 
Verwandte Themen