Ich bin sowohl in der Kolben- als auch in der Sqlalchemie neu. Ich arbeite gerade an einer Kolben-App und verwende Sqlalchemie vorerst. Ich habe mich gefragt, ob es einen signifikanten Vorteil gibt, den ich durch die Verwendung von Flask-Sqlalchemy gegenüber Sqlalchemy erzielen kann. Ich konnte nicht genug Motivationen in http://packages.python.org/Flask-SQLAlchemy/index.html finden oder vielleicht habe ich den Wert nicht verstanden !! Ich würde mich über Ihre Klarstellungen freuen.
91
flask-sqlalchemy
über alt sindsqlalchemy
?Flask-SqlAlchemy
jedoch, dass es keine Möglichkeit gibt, Mandantenfähigkeit in der App einzurichten. Das ist IMO größtes Negativ.binds
Es wird lediglich bereitgestellt, unterschiedliche Datenbanken an unterschiedliche Modelle anzuhängen, während es keine Möglichkeit gibt, mandantenspezifische Datenbanken mit demselben Modell zu verwenden.Antworten:
Das Hauptmerkmal der
Flask-SQLAlchemy
ist die ordnungsgemäße Integration in die Flask-Anwendung - sie erstellt und konfiguriert Engine, Verbindung und Sitzung und konfiguriert sie für die Verwendung mit der Flask-App.Dieses Setup ist recht komplex, da wir die Sitzung mit Gültigkeitsbereich erstellen und sie entsprechend dem Lebenszyklus der Flask-Anwendungsanforderung / -antwort ordnungsgemäß verarbeiten müssen.
In der idealen Welt wäre das das einzige Merkmal von
Flask-SQLAlchemy
, aber tatsächlich fügt es ein paar weitere Dinge hinzu. Hier ist ein guter Blog-Beitrag mit einer Übersicht: Demystifying Flask-SQLAlchemy .Als ich zum ersten Mal mit Flask und SQLAlchemy gearbeitet habe, hat mir dieser Aufwand nicht gefallen. Ich ging hinüber und extrahierte den Sitzungsverwaltungscode aus der Erweiterung. Dieser Ansatz funktioniert, obwohl ich festgestellt habe, dass es ziemlich schwierig ist, diese Integration richtig durchzuführen.
Der einfachere Ansatz (der in einem anderen Projekt verwendet wird, an dem ich arbeite) besteht darin, einfach einzusteigen
Flask-SQLAlchemy
und keine der zusätzlichen Funktionen zu verwenden, die er bietet. Sie haben dasdb.session
und können es verwenden, als wäre es ein reinesSQLAlchemy
Setup.quelle
This setup is quite complex as we need to create the scoped session and properly handle it according to the Flask application request/response life-cycle.
Weitere Details finden Sie in den SQLAlchemy-Dokumenten: Wann erstelle ich eine Sitzung, wann schreibe ich sie fest und wann mache ich sie Schließe es? und kontextbezogene / threadlokale Sitzungen .Um ehrlich zu sein, sehe ich keine Vorteile. IMHO, Flask-SQLAlchemy erstellt eine zusätzliche Ebene, die Sie nicht wirklich benötigen. In unserem Fall haben wir eine ziemlich komplexe Flask-Anwendung mit mehreren Datenbanken / Verbindungen (Master-Slave), die sowohl ORM als auch Core verwenden, wobei wir unter anderem unsere Sitzungen / DB-Transaktionen steuern müssen (z. B. Dryrun- oder Commit-Modi). Flask-SQLAlchemy fügt einige zusätzliche Funktionen hinzu, z. B. die automatische Zerstörung der Sitzung, wobei einige Dinge für Sie vorausgesetzt werden, die sehr oft nicht Ihren Anforderungen entsprechen.
quelle
Flask-SQLAlchemy bietet Ihnen eine Reihe nützlicher Extras, die Sie sonst mit SQLAlchemy selbst implementieren würden.
Positive Seiten bei der Verwendung von Flask-SQLAlchemy
apply_driver_hacks
, die automatisch vernünftige Standardeinstellungen auf Thigs wie MySQL-Poolgröße setztTabellennamen automatisch festlegen. Flask-SQLAlchemy legt Ihre Tabellennamen automatisch fest und konvertiert Ihre
ClassName
>class_name
dies kann durch Festlegen des__tablename__
Klassenlistenelements überschrieben werdenNegative Seiten bei Verwendung von Flask-SQLAlchemy
quelle
In der SQLAlchemy-Dokumentation heißt es eindeutig, dass Sie Flask-SQLAlchemy verwenden sollten (insbesondere, wenn Sie die Vorteile nicht verstehen!):
Dieses Zitat und eine ausführliche Motivation finden Sie in der zweiten Frage der Sitzungs-FAQ .
quelle
Wie @schlamar vorschlägt, ist Flask-SqlAlchemy auf jeden Fall eine gute Sache. Ich möchte dem dort gemachten Punkt nur einen zusätzlichen Kontext hinzufügen.
Haben Sie nicht das Gefühl, dass Sie eine über die andere wählen. Nehmen wir zum Beispiel an, wir möchten alle Datensätze mithilfe eines Modells mit Flask-Sqlalchemy aus einer Tabelle abrufen. Es ist so einfach wie
Für viele der einfachen Fälle wird Flask-Sqlalchemy völlig in Ordnung sein. Der zusätzliche Punkt, den ich ansprechen möchte, ist, wenn Flask-Sqlalchemy nicht tun wird, was Sie wollen, dann gibt es keinen Grund, warum Sie SqlAlchemy nicht direkt verwenden können.
Wie Sie sehen, können wir problemlos von einem zum anderen springen, und im zweiten Beispiel verwenden wir tatsächlich die von Flask-Sqlalchemy definierten Modelle.
quelle
Model.query.all()
“ - das kann alles mit getan wird nur SQLAlchemy, mit Flask-SQLAlchemy bietet absolut nichts Neues.Model.query.all()
,db.session.query(Model).all()
um die Sitzungen wie gewohnt zu verfolgen und zu aktualisieren.Hier ist ein Beispiel für einen Vorteil, den Ihnen die Kolben-Sqlalchemie gegenüber der einfachen Sqlalchemie bietet.
Angenommen, Sie verwenden flask_user.
flask_user automatisiert die Erstellung und Authentifizierung von Benutzerobjekten, sodass auf Ihre Datenbank zugegriffen werden muss. Die Klasse UserManager ruft dazu einen sogenannten "Adapter" auf, der die Datenbankaufrufe abstrahiert. Sie stellen im UserManager-Konstruktor einen Adapter bereit, und der Adapter muss folgende Funktionen implementieren:
Wenn Sie flask-sqlalchemy verwenden, können Sie den integrierten SQLAlchemyAdapter verwenden. Wenn Sie sqlalchemy (not-flask-sqlalchemy) verwenden, können Sie unterschiedliche Annahmen darüber treffen, wie Objekte in der Datenbank gespeichert werden (wie die Namen der Tabellen), sodass Sie Ihre eigene Adapterklasse schreiben müssen.
quelle