Ich hatte einen kleinen Webdienst mit Flask
und Flask-SQLAlchemy
, der nur ein Modell enthielt. Ich möchte jetzt die gleiche Datenbank verwenden, aber mit einer Befehlszeilen-App, also würde ich gerne die Flask
Abhängigkeit fallen lassen.
Mein Modell sieht so aus:
%Vor% Da db
nicht länger ein Verweis auf flask.ext.sqlalchemy.SQLAlchemy(app)
ist, kann ich mein Modell so konvertieren, dass es nur SQLAlchemy verwendet. Gibt es eine Möglichkeit für die beiden Anwendungen (eine mit Flask-SQLAlchemy
die andere mit SQLAlchemy
), dieselbe Datenbank zu verwenden?
Dies beantwortet Ihre Frage nicht vollständig, da die Flask-Abhängigkeit nicht entfernt wird, aber Sie können SqlAlchemy
in Skripts und Tests verwenden, indem Sie die Flask-App einfach nicht ausführen.
Eine Schwierigkeit, der Sie möglicherweise begegnen, ist die Verwendung von db.Model
als Basisklasse für Ihre Modelle, wenn Sie die Webanwendung und unabhängige Skripts mit derselben Codebasis als Ziel verwenden möchten. Eine mögliche Lösung besteht darin, dynamischen Polymorphismus zu verwenden und die Klassendefinition in eine Funktion umzuwandeln.
Wenn Sie die Klassenlaufzeit in der Funktion erstellen, können Sie verschiedene SqlAlchemy
Instanzen übergeben. Einziger Nachteil ist, dass Sie die Funktion aufrufen müssen, um die Klasse zu konstruieren, bevor Sie sie verwenden.
Flask (& gt; 1.0) versucht, Helfer zum Teilen von Code zwischen einer Webanwendung und einer Befehlszeilenschnittstelle bereitzustellen; Ich persönlich denke, es könnte sauberer, leichter und einfacher sein, Bibliotheken zu erstellen, die nicht mit flask verbunden sind, aber Sie sollten folgendes überprüfen:
Sehen Sie sich dieses github.com/mardix/active-alchemy
anActive-Alchemy ist ein Framework-agnostischer Wrapper für SQLAlchemy, der es sehr einfach macht, einen einfachen aktiven Datensatz wie api zu implementieren, während er immer noch db.session darunter verwendet. Inspiriert von Flask-SQLAlchemy
Es gibt einen großartigen Artikel über Flask-SQLAlchemy: wie es funktioniert und wie man Modelle modifiziert, um sie außerhalb von Flask zu verwenden:
Tags und Links python sqlalchemy flask-sqlalchemy