Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie baut man eine Flask-Anwendung um eine bereits vorhandene Datenbank herum?

Ich würde sagen, Ihre Frage hat überhaupt nichts mit der Flasche zu tun. Beispielsweise haben Sie kein Problem mit Vorlagen, Routen, Ansichten oder Logon-Dekoratoren.

Wo Sie kämpfen, ist bei SQLAlchemy.

Mein Vorschlag ist also, Flask für eine Weile zu ignorieren und sich zuerst an SQLAlchemy zu gewöhnen. Sie müssen sich an Ihre vorhandene Datenbank und den Zugriff darauf von SQLAlchemy gewöhnen. Verwenden Sie ein MySQL-Dokumentationstool, um sich hier zurechtzufinden. Beginnen Sie mit so etwas (beachten Sie, dass es nichts mit Flask zu tun hat, fragen Sie alle ... noch):

#!/usr/bin/python
# -*- mode: python -*-

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine('sqlite:///webmgmt.db', convert_unicode=True, echo=False)
Base = declarative_base()
Base.metadata.reflect(engine)


from sqlalchemy.orm import relationship, backref

class Users(Base):
    __table__ = Base.metadata.tables['users']


if __name__ == '__main__':
    from sqlalchemy.orm import scoped_session, sessionmaker, Query
    db_session = scoped_session(sessionmaker(bind=engine))
    for item in db_session.query(Users.id, Users.name):
        print item

In der Zeile „engine = " Sie müssen Ihren Pfad zu Ihrer MySQL-Datenbank angeben, damit SQLAlchemy ihn findet. In meinem Fall habe ich eine bereits vorhandene sqlite3-Datenbank verwendet.

In der Zeile "class Users(Base) "Sie müssen eine der vorhandenen Tabellen in Ihrer MySQL-Datenbank verwenden. Ich wusste, dass meine sqlite3-Datenbank eine Tabelle namens "users" hatte.

Nach diesem Punkt weiß SQLalchemy, wie es sich mit Ihrer MySQL-Datenbank verbinden kann, und es kennt eine der Tabellen. Sie müssen jetzt alle anderen Tabellen hinzufügen, die Sie interessieren. Schließlich müssen Sie Beziehungen zu SQLalchemy angeben. Hier meine ich Dinge wie Eins-zu-Eins, Eins-zu-Viele, Viele-zu-Viele, Eltern-Kind und so weiter. Die SQLAlchemy-Website enthält einen ziemlich langen Abschnitt darüber.

Nach der Zeile "if __name__ == '__main__' " kommt nur etwas Testcode. Er wird ausgeführt, wenn ich mein Python-Skript nicht importiere, sondern ausführe. Hier sehen Sie, dass ich eine DB-Sitzung erstelle und das für eine sehr einfache Abfrage ist.

Mein Vorschlag ist, dass Sie zuerst die wichtigen Teile der Dokumentation von SQLAlchemy lesen, zum Beispiel die beschreibende Tabellendefinition, das Beziehungsmodell und wie man Abfragen durchführt. Sobald Sie das wissen, können Sie den letzten Teil meines Beispiels in einen Controller umwandeln (z. B. mit Pythons yield -Methode) und schreiben Sie eine Ansicht, die diesen Controller verwendet.