Django mit externen Datenbanken verknüpfen?

Django, Flask, Bottle, WSGI, CGI…
Antworten
gotridofmyphone
User
Beiträge: 26
Registriert: Mittwoch 15. März 2017, 08:54

Mittwoch 15. November 2017, 14:24

Hallo,

ich stehe in der Konzeptphase zu einem größeren Projekt mit Django im Klinsch. Soweit ich verstanden habe, macht Django vieles automatisch. So elementare Dinge wie Objekte ansehen/anlegen/ändern/löschen vor allem.

Dies aber nur unter der Voraussetzung, dass auch die substanziellen Daten, womit ich die Daten meine, die ihrer Funktion nach mehr mit dem Projekt als solches als mit Django zu tun haben (das nicht mehr sein soll als die "Steuereinheit", "Admin-Konsole"), dennoch von Django verwaltet werden müssen. Mir ist aber die Abhängigkeit von Django in punkto Datenhaltung nicht geheuer, und würde ganz gerne das soweit wie möglich und praktikabel getrennt halten. Ein Teil der Funktionen soll mittels REST anderen Parteien der Gesamtstruktur zur Verfügung gestellt werden. Das ORM für die substanziellen Daten, also soweit ich es überblicke allen Daten außer zum Beispiel die Nutzer der Webplattform, soll etwa SQLAlchemy sein, das von Django ja nicht direkt unterstützt wird. SQLAlchemy macht mir einen robusteren Eindruck, z.B. wenn es um zusammengesetzte Primärschlüssel geht. Lt. dem Django-Projekt wird das ja sogar noch gar nicht unterstützt, klappt halt mehr schlecht als recht nur mit irgendwelchen Hacks von SO.

Ist nun mein Verständnis richtig, dass das zwar geht, dass ich über SQLAlchemy eine zusätzliche Datenbank verknüpfen kann, ich aber all die tollen Django-Automatismen, die Views die Django out of the box für mit Django verwaltete Entitäten mitliefert, noch mal selbst machen muss?

Es gibt ja tolle Django-Erweiterungen, etwa aldjemy. Aldjemy ist aber doch eigentlich nur ein Adapter für SQLAlchemy, um die Entitäten, die man unter Django-Regie gestellt hat, halt mit den flexibleren Abfragemöglichkeiten von SQLAlchemy zu verknüpfen. Ich brauche glaube ich die Umkehrung davom: Ich will ein SQLAlchemy-Model mit den Standardautomatismen von Django verwaltbar machen.


Für Tipps wäre ich dankbar! :-)

getridofmyphone.
Benutzeravatar
noisefloor
User
Beiträge: 2474
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: Görgeshausen
Kontaktdaten:

Mittwoch 15. November 2017, 19:52

Hallo,
Soweit ich verstanden habe, macht Django vieles automatisch. So elementare Dinge wie Objekte ansehen/anlegen/ändern/löschen vor allem.
Nein, nicht wirklich. Du musst schon alles explizit anstoßen. Wenn du mit "automatisch" meinst, dass z.B. bei Class-Based Views nicht unbedingt einen Query schreiben musst: ja, das stimmt, weil die Klasse einen Default-Query hat. Den man aber natürlich überschreiben kann, wenn nötig.

Was im Hintergrund automatisch in der DB angelegt wird sind die Tabelle, die Django für die interne Verwaltung braucht. Das passiert aber auch nur automatisch, wenn du ein Projekt anlegst.
Dies aber nur unter der Voraussetzung, dass auch die substanziellen Daten, womit ich die Daten meine, die ihrer Funktion nach mehr mit dem Projekt als solches als mit Django zu tun haben (das nicht mehr sein soll als die "Steuereinheit", "Admin-Konsole"), dennoch von Django verwaltet werden müssen.
Nein, muss nicht. Du kannst auch Django ohne das Django-ORM verwenden. Du musst dann halt nur sicherstellen, dass z.B. deine Templates alle Daten aus anderen Quellen erhalten. Außerdem siehst du die Daten per Default nicht im Admin-Interface und auch andere nette Sachen wie automatische Webformulare aus Models gehen dann nicht.
Mir ist aber die Abhängigkeit von Django in punkto Datenhaltung nicht geheuer, und würde ganz gerne das soweit wie möglich und praktikabel getrennt halten.
Weil? Django ist ein ORM, aufgrund der Verbreitung von Django vielleicht das meistbenutzte ORM unter Python? Klar ist außerhalb von Django SQLAlchemy everybody's darling. Aber "Geheuer" ist das Django ORM genau so wie SQLAlchemy.
SQLAlchemy macht mir einen robusteren Eindruck
Na ja... definiere "robuster". Robust ist beides. Der Funktionsumfang von SQLAlchemy ist sicherlich größer als der von Django. Das Django ORM fokusiert halt auf Webanwendungen und die hohe Integration in Django, SQLAlchemy ist eine "universelles" ORM.
z.B. wenn es um zusammengesetzte Primärschlüssel geht. Lt. dem Django-Projekt wird das ja sogar noch gar nicht unterstützt, klappt halt mehr schlecht als recht nur mit irgendwelchen Hacks von SO.
Dafür gibt's auch fertige Django-Extensions, z.B. http://django-composite-foreignkey.read ... en/latest/
Ich will ein SQLAlchemy-Model mit den Standardautomatismen von Django verwaltbar machen.
Das geht es AFAIK nicht.
Außerdem ist das doch ein Widerspruch zum oben gesagten: ob jetzt das Django ORM per Standardautomatismen Sachen in der DB macht oder SQLAlchemy spielt doch keine Rolle. Die "Kontrolle" gibst du in beiden Fällen zu Gunsten des Komforts ab.

Noch was zu Datenhaltung: Django unterstützt mehrere Datenbanken pro Projekt. D.h. du kannst "deine" Daten in eine andere DB packen als die interne Datenverwaltung von Django. Das lässt sich über die Konfiguration von Django recht einfach bewerkstelligen, dass "wie" ist in der Django Doku erklärt.

Gruß, noisefloor
Antworten