sql >> データベース >  >> RDS >> Mysql

既存のデータベースを中心にフラスコアプリケーションを構築するにはどうすればよいですか?

    あなたの質問はフラスコとはまったく関係がないと思います。たとえば、テンプレート、ルート、ビュー、ログオンデコレータに問題はありません。

    苦労しているのは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を使用します) メソッド)、そのコントローラーを使用するビューを記述します。



    1. CASE ..OracleSQLのWHEN式

    2. ClusterControlを使用してハイブリッドクラウドMySQLデータベースをデプロイする

    3. 12一般的に使用されるSQL演算子

    4. 初心者の場合、MySQLとPostgreSQLには大きな違いがありますか