Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment construire une application flask autour d'une base de données déjà existante ?

Je dirais que votre question n'a rien à voir avec le flacon. Par exemple, vous n'avez aucun problème avec les modèles, les itinéraires, les vues ou les décorateurs de connexion.

Là où vous avez du mal, c'est à SQLAlchemy.

Ma suggestion est donc d'ignorer Flask pendant un certain temps et de s'habituer d'abord à SQLAlchemy. Vous devez vous habituer à votre base de données existante et savoir comment y accéder depuis SQLAlchemy. Utilisez un outil de documentation MySQL pour vous y retrouver. Le début avec quelque chose comme ça (notez que cela n'a rien à voir avec Flask ask all ... pour le moment):

#!/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

Dans la ligne "engine = " vous devez fournir votre chemin vers votre base de données MySQL, afin que SQLAlchemy le trouve. Dans mon cas, j'ai utilisé une base de données sqlite3 préexistante.

Dans la ligne "class Users(Base) " vous devez utiliser l'une des tables existantes dans votre base de données MySQL. Je savais que ma base de données sqlite3 avait une table nommée "users".

Après ce point, SQLalchemy sait comment se connecter à votre base de données MySQL et connaît l'une des tables. Vous devez maintenant ajouter toutes les autres tables qui vous intéressent. Enfin, vous devez spécifier les relations avec SQLalchemy. Ici, je veux dire des choses comme un à un, un à plusieurs, plusieurs à plusieurs, parent-enfant et ainsi de suite. Le site Web de SQLAlchemy contient une section assez longue à ce sujet.

Après la ligne "if __name__ == '__main__' " vient juste un code de test. Il sera exécuté si je n'importe pas mon script python, mais que je l'exécute. Ici, vous voyez que je crée une session DB et que c'est pour une requête très simple.

Ma suggestion est que vous lisiez d'abord les parties importantes de la documentation de SQLAlchemy, par exemple la définition descriptive de la table, le modèle de relation et comment interroger. Une fois que vous savez cela, vous pouvez changer la dernière partie de mon exemple en un contrôleur (par exemple en utilisant le yield de Python method) et écrivez une vue qui utilise ce contrôleur.