Mysql
 sql >> Database >  >> RDS >> Mysql

Come costruire un'applicazione flask attorno a un database già esistente?

Direi che la tua domanda non ha nulla a che fare con il pallone. Ad esempio, non hai problemi con i modelli, i percorsi, le viste o i decoratori di accesso.

Il punto in cui lotti è su SQLAlchemy.

Quindi il mio suggerimento è di ignorare Flask per un po' e di abituarsi prima a SQLAlchemy. Devi abituarti al tuo database esistente e come accedervi da SQLAlchemy. Usa alcuni strumenti di documentazione MySQL per orientarti. L'inizio con qualcosa del genere (nota che non ha nulla a che fare con Flask chiedi a tutti ... ancora):

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

Nella riga "engine = " devi fornire il tuo percorso al tuo database MySQL, in modo che SQLAlchemy lo trovi. Nel mio caso ho usato un database sqlite3 preesistente.

Nella riga "class Users(Base) " devi usare una delle tabelle esistenti nel tuo database MySQL. Sapevo che il mio database sqlite3 aveva una tabella denominata "users".

Dopo questo punto, SQLalchemy sa come connettersi al tuo database MySQL e conosce una delle tabelle. Ora devi aggiungere tutte le altre tabelle a cui tieni. Infine, è necessario specificare le relazioni con SQLalchemy. Qui intendo cose come uno a uno, uno a molti, molti a molti, genitore-figlio e così via. Il sito web di SQLAlchemy contiene una sezione piuttosto lunga su questo.

Dopo la riga "if __name__ == '__main__' " arriva solo del codice di test. Verrà eseguito se non importo il mio script python, ma lo eseguo. Qui vedi che creo una sessione DB ed è quella per una query molto semplice.

Il mio suggerimento è di leggere prima le parti importanti della documentazione di SQLAlchemy, ad esempio la definizione della tabella descrittiva, il modello di relazione e come eseguire query. Una volta che lo sai, puoi cambiare l'ultima parte del mio esempio in un controller (ad esempio usando yield di Python metodo) e scrivere una vista che utilizza quel controller.