Powiedziałbym, że twoje pytanie nie ma w ogóle nic wspólnego z kolbą. Na przykład nie masz problemu z szablonami, trasami, widokami lub dekoratorami logowania.
Zmagasz się w SQLAlchemy.
Więc moja sugestia to zignorowanie Flask przez jakiś czas i przyzwyczajenie się najpierw do SQLAlchemy. Musisz przyzwyczaić się do istniejącej bazy danych i dostępu do niej z SQLAlchemy. Użyj jakiegoś narzędzia dokumentacji MySQL, aby znaleźć sposób na obejście tego. Zacznij od czegoś takiego (zauważ, że nie ma to nic wspólnego z Flask, zapytaj wszystkich ... jeszcze):
#!/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
W wierszu „engine =
" musisz podać swoją ścieżkę do bazy danych MySQL, aby SQLAlchemy ją znalazł. W moim przypadku użyłem istniejącej bazy danych sqlite3.
W wierszu „class Users(Base)
" musisz użyć jednej z istniejących tabel w bazie danych MySQL. Wiedziałem, że moja baza danych sqlite3 zawiera tabelę o nazwie "users".
Po tym punkcie SQLalchemy wie, jak połączyć się z bazą danych MySQL i wie o jednej z tabel. Musisz teraz dodać wszystkie inne tabele, na których Ci zależy. Na koniec musisz określić relacje z SQLalchemy. Mam tu na myśli takie rzeczy jak jeden do jednego, jeden do wielu, wiele do wielu, rodzic-dziecko i tak dalej. Strona internetowa SQLAlchemy zawiera dość obszerną sekcję na ten temat.
Po wierszu „if __name__ == '__main__'
" po prostu pojawia się kod testowy. Zostanie on wykonany, jeśli nie zaimportuję mojego skryptu Pythona, ale go uruchomię. Tutaj widzisz, że tworzę sesję DB i jest to bardzo proste zapytanie.
Sugeruję, abyś najpierw przeczytał o ważnych częściach dokumentacji SQLAlchemy, na przykład opisowej definicji tabeli, modelu relacji i sposobie wykonywania zapytań. Kiedy już to wiesz, możesz zmienić ostatnią część mojego przykładu na kontroler (np. używając yield
Pythona metody) i napisz widok, który używa tego kontrolera.