Flask-FileAlchemy ist eine Flask-Erweiterung, mit der Sie mit Markdown- oder YAML-Formatedateien für Ihre Apps als Hauptdatenspeicher verwendet werden können.
$ pip install flask-filealchemyDie Einschränkungen, für die Datengeschäfte für Anwendungen verwendet werden sollen, die nur lokal ausgeführt werden müssen, sind im Vergleich zu denen, die den Produktionsverkehr bedienen müssen, ziemlich entspannt. Für solche Anwendungen ist es normalerweise in Ordnung, die Leistung für die Benutzerfreundlichkeit zu opfern.
Ein sehr starker Anwendungsfall ist hier die Erzeugung statischer Stellen. Während Sie Frozen-Flask verwenden können, um eine gesamte Flask-Anwendung auf einen Satz von HTML-Dateien zu "einfrieren", muss Ihre Anwendung noch Daten von irgendwo aus lesen. Dies bedeutet, dass Sie einen Datenspeicher einrichten müssen, der (lokal) tendenziell dateibasierte SQLite ist. Dies macht den Job sehr gut, aber dies bedeutet auch, SQL -Anweisungen zur Eingabe von Daten auszuführen.
Abhängig davon, wie viele Datenmodelle Sie haben und welche Typen sie enthalten, kann dies schnell außer Kontrolle geraten (stellen Sie sich vor, Sie müssen eine INSERT -Anweisung für einen Blog -Beitrag schreiben).
Außerdem können Sie Ihre Daten nicht kontrollieren. Nun, technisch gesehen können Sie, aber die Diffs machen für einen Menschen keinen Sinn.
Mit Flask -Filealchemy können Sie einen alternativen Datenspeicher verwenden - Klartextdateien.
Klartextdateien haben den Vorteil, für einen Menschen viel einfacher zu handhaben. Außerdem können Sie sie steuern, damit Ihre Anwendungsdaten und Ihr Code zusammen eingecheckt werden und den Verlauf teilen.
Mit Flask-FilealChemy können Sie Ihre Daten in Markdown- oder YAML-formatierte Klartextdateien eingeben und sie entsprechend den SQLALCHEMED-Modellen, die Sie mit Flask-SQLAlchemy definiert haben Funktioniert am besten) und ist dann bereit, dass Ihre App abfragt, wie es gefällt.
Auf diese Weise können Sie den Komfort dynamischer Stellen behalten, ohne die Einfachheit statischer Stellen zu beeinträchtigen.
Definieren Sie Ihre Datenmodelle mit der Standard-API von Standard (Flask-) SQLalchemy. Ein BlogPost -Modell kann beispielsweise wie folgt definiert werden.
app = Flask ( __name__ )
# configure Flask-SQLAlchemy
app . config [ 'SQLALCHEMY_DATABASE_URI' ] = 'sqlite:///:memory:'
db = SQLAlchemy ()
db . init_app ( app )
class BlogPost ( db . Model ):
__tablename__ = 'blog_posts'
slug = Column ( String ( 255 ), primary_key = True )
title = Column ( String ( 255 ), nullable = False )
content = Column ( Text , nullable = False ) Erstellen Sie anschließend ein data/ ein Verzeichnis irgendwo auf Ihrer Festplatte (um die Dinge einfach zu halten, wird empfohlen, dieses Verzeichnis in der Anwendungsroste zu haben). Erstellen Sie für jedes Modell, das Sie definiert haben, ein Verzeichnis unter diesem data/ Verzeichnis mit demselben Namen wie das __tablename__ -Attribut.
Wir unterstützen derzeit drei verschiedene Möglichkeiten, um Daten zu definieren.
Der erste Weg besteht darin, mehrere YAML -Dateien in den data/<__tablename__>/ Verzeichnis zu haben, wobei jede Datei einem Datensatz entspricht.
Im Fall des "Blog" -Beispiels können wir einen neuen BlogPost Datensatz definieren, indem wir die data/blog_posts/first-post-ever.yml mit den folgenden Inhalten erstellen.
slug : first-post-ever
title : First post ever!
content : |
This blog post talks about how it's the first post ever!Das Hinzufügen weiterer solcher Dateien in demselben Verzeichnis würde zu weiteren Datensätzen führen.
Für "kleinere" Modelle, die nicht mehr als 2-3 Felder haben, unterstützt Flask-Filealchemy das Lesen aus einer _all.yml Datei. Fügen Sie in einem solchen Fall einfach alle Zeilen in die Datei _all.yml in das Tabellenverzeichnis hinzu, anstatt für jede Zeile eine Datei hinzuzufügen.
Für das Beispiel "Blog" würde dies wie die folgende aussehen.
- slug : first-post-ever
title : First post ever!
content : This blog post talks about how it's the first post ever!
- slug : second-post-ever
title : second post ever!
content : This blog post talks about how it's the second post ever! Es ist auch möglich, Daten aus Markdown-Dateien im Jekyll-Stil zu laden, die Frontmatter-Metadaten enthalten.
Im Falle des Blog-Beispiels ist es möglich, einen neuen BlogPost Datensatz zu erstellen, indem eine data/blog_posts/first-post-ever.md mit den folgenden Inhalten definiert wird.
---
slug : first-post-ever
title : First post ever!
---
This blog post talks about how it's the first post ever! Bitte beachten Sie, dass beim Definieren von Daten mithilfe von Markdown den Namen der Spalte, die dem Haupt -Markdown -Körper zugeordnet ist, content sein muss .
Konfigurieren Sie schließlich Flask-FileAlchemy mit Ihrem Setup und bitten Sie ihn, alle Ihre Daten zu laden.
# configure Flask-FileAlchemy
app . config [ 'FILEALCHEMY_DATA_DIR' ] = os . path . join (
os . path . dirname ( os . path . realpath ( __file__ )), 'data'
)
app . config [ 'FILEALCHEMY_MODELS' ] = ( BlogPost ,)
# load tables
FileAlchemy ( app , db ). load_tables () Flask-FileAlchemy liest dann Ihre Daten aus dem angegebenen Verzeichnis und speichert sie im Datenspeicher Ihrer Wahl, mit dem Sie Flask-FileAlchemy konfiguriert haben (die Präferenz ist sqlite:///:memory: :).
Bitte beachten Sie, dass es nicht möglich ist, mit db.session in diese Datenbank zu schreiben. Technisch gesehen ist es erlaubt, aber die Änderungen, die Ihre App vornimmt, werden nur im In-Memory-Datenspeicher widergespiegelt, aber nicht auf der Festplatte bestehen.
Beiträge sind sehr willkommen!
Bitte stellen Sie sicher, dass Sie Python 3.7+ und Gedichte installiert haben.
Git Clone Das Repository - git clone https://github.com/siddhantgoel/flask-filealchemy .
Installieren Sie die für die Entwicklung erforderlichen Pakete - poetry install .
Das ist es im Grunde genommen. Sie sollten jetzt in der Lage sein, die Testsuite auszuführen - poetry run pytest .