あなたの質問はフラスコとはまったく関係がないと思います。たとえば、テンプレート、ルート、ビュー、ログオンデコレータに問題はありません。
苦労しているのはSQLAlchemyです。
したがって、私の提案は、Flaskをしばらく無視して、最初にSQLAlchemyに慣れることです。既存のデータベースとSQLAlchemyからデータベースにアクセスする方法に慣れる必要があります。これを回避する方法を見つけるには、MySQLドキュメントツールを使用してください。このようなものから始めます(Flaskとは何の関係もないことに注意してください...まだ):
#!/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
「engine =
」の行 「SQLAlchemyがそれを見つけるために、MySQLデータベースへのパスを提供する必要があります。私の場合、既存のsqlite3データベースを使用しました。
「class Users(Base)
」の行 「MySQLデータベースの既存のテーブルの1つを使用する必要があります。私のsqlite3データベースに「users」という名前のテーブルがあることを知っていました。
この時点以降、SQLalchemyはMySQLデータベースに接続する方法を認識し、テーブルの1つを認識します。ここで、気になる他のすべてのテーブルを追加する必要があります。最後に、SQLalchemyとの関係を指定する必要があります。ここでは、1対1、1対多、多対多、親子などを意味します。 SQLAlchemyのWebサイトには、これに関するかなり長いセクションが含まれています。
行の後"if __name__ == '__main__'
「テストコードがいくつかあります。Pythonスクリプトをインポートせずに実行すると実行されます。ここでは、DBセッションを作成し、非常に単純なクエリ用であることがわかります。
私の提案は、SQLAlchemyのドキュメントの重要な部分、たとえば、記述テーブルの定義、関係モデル、クエリの方法について最初に読むことです。これを知ったら、私の例の最後の部分をコントローラーに変更できます(たとえば、Pythonのyield
を使用します) メソッド)、そのコントローラーを使用するビューを記述します。