Řekl bych, že vaše otázka nemá s baňkou vůbec nic společného. Například nemáte problém se šablonami, trasami, pohledy nebo dekorátory přihlášení.
Kde bojujete, je v SQLAlchemy.
Můj návrh je tedy chvíli Flask ignorovat a nejprve si zvyknout na SQLAlchemy. Musíte si zvyknout na svou stávající databázi a jak k ní přistupovat z SQLAlchemy. Použijte nějaký dokumentační nástroj MySQL, abyste se v tom zorientovali. Začátek s něčím takovým (všimněte si, že to nemá nic společného s Flask ask all ... zatím):
#!/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
V řádku "engine =
" musíte zadat svou cestu ke své databázi MySQL, aby ji SQLAlchemy našel. V mém případě jsem použil již existující databázi sqlite3.
V řádku "class Users(Base)
" potřebujete použít jednu z existujících tabulek ve vaší databázi MySQL. Věděl jsem, že moje databáze sqlite3 má tabulku s názvem "users".
Po tomto bodě SQLalchemy ví, jak se připojit k vaší databázi MySQL, a ví o jedné z tabulek. Nyní musíte přidat všechny ostatní tabulky, které vás zajímají. Nakonec musíte určit vztahy k SQLalchemy. Zde mám na mysli věci jako one-to-one, one-to-many, many-to-many, rodič-dítě a tak dále. Webová stránka SQLAlchemy o tom obsahuje poměrně obsáhlou sekci.
Za řádkem "if __name__ == '__main__'
" právě přichází nějaký testovací kód. Bude spuštěn, pokud neimportuji svůj python skript, ale spustím ho. Zde vidíte, že vytvářím relaci DB a je to pro velmi jednoduchý dotaz.
Navrhuji, abyste si nejprve přečetli o důležitých částech dokumentace SQLAlchemy, například o definici popisné tabulky, modelu vztahů a způsobu dotazování. Jakmile to budete vědět, můžete změnit poslední část mého příkladu na ovladač (např. pomocí Pythonu yield
metoda) a napište pohled, který používá tento řadič.