2014-01-20 15 views
8

Ich bin ein wenig verwirrt mit dem Thema, auf das im Titel angespielt wird.Flask-SQLAlchemy - Wann werden die Tabellen/Datenbanken erstellt und gelöscht?

Also, wenn eine Flask-App gestartet wird, sucht die SQLAlchemy die SQLALCHEMY_DATABASE_URI für die richtige, in meinem Fall MySQL-Datenbank. Werden die Tabellen dann erstellt, wenn sie nicht bereits vorhanden sind?

Was ist, wenn die Datenbank, die in die SQLALCHEMY_DATABASE_URI Variable in der config.py Datei programmiert ist, nicht existiert?

Was ist, wenn diese Datenbank existiert und nur einige der Tabellen existieren (Es gibt mehr Tabellen, die in den SQLAlchemy-Code als in der tatsächlichen MySQL-Datenbank vorhanden sind)? Löscht es diese Tabellen und erstellt dann neue Tabellen mit den aktuellen Spezifikationen?

Und was ist, wenn diese Tabellen alle existieren? Werden sie gelöscht und neu erstellt?

Ich versuche zu verstehen, wie der gesamte Prozess funktioniert, damit ich (1) Datenbankinformationen nicht verlieren, wenn Änderungen an dem Schema vorgenommen werden, und (2) den erforderlichen Code schreiben kann, vollständig zu verwalten, wie und wann SQLAlchemy spricht mit der eigentlichen Datenbank.

Antwort

10

Tabellen werden nicht automatisch erstellt; müssen Sie die SQLAlchemy.create_all() method explizit für Sie Tabellen erstellen zu müssen, rufen:

db = SQLAlchemy(app) 
db.create_all() 

Sie dies zum Beispiel mit Befehlszeilenprogramm, tun können. Oder, wenn Sie auf einem PaaS wie Google App Engine eine dedizierte Nur-Administrator-Ansicht bereitstellen.

Das gleiche gilt für die Zerstörung der Datenbanktabelle; Verwenden Sie die SQLAlchemy.drop_all() method.

Siehe Creating and Dropping tables chapter of the documentation, oder werfen Sie einen Blick auf die database chapter of the Mega Flask Tutorial.

+0

Ich kenne diese Methoden, aber darf ich sie nicht aus der App heraus aufrufen? Wie kann beim Start der App überprüft werden, ob diese Datenbank existiert und, wenn dies nicht der Fall ist, die Methode create_all aufrufen? Im Mega Tutorial verwendet er SQLite, was bedeutet, dass er nach einer Datei suchen kann, um zu sehen, ob seine Datenbank da ist. Ist das mit MySQL möglich? –

+0

@AlexChumbley: Sie können das sicherlich tun; finde heraus, ob keine Tabellen aufgelistet sind, und rufe 'create_all' automatisch auf. –

+0

@AlexChumbley: Ich arbeite gerade an einer GAE-App, wo man mit einer '/ admin'-Route den' create_tables'-Teil aufrufen kann, mit Blick auf zukünftige Migrationsunterstützung. –

Verwandte Themen