FlaskのSQLAlchemy
多くの人がデータベースアクセスに SQLAlchemy を好みます。 この場合、フラスコアプリケーション用のモジュールの代わりにパッケージを使用し、モデルを別のモジュール(より大きなアプリケーション)にドロップすることをお勧めします。 それは必須ではありませんが、それは非常に理にかなっています。
SQLAlchemyを使用する4つの非常に一般的な方法があります。 ここでそれぞれの概要を説明します。
Flask-SQLAlchemy拡張
SQLAlchemyは、一般的なデータベース抽象化レイヤーおよびオブジェクトリレーショナルマッパーであり、少しの構成作業が必要なため、それを処理するFlask拡張機能があります。 すぐに始めたい場合は、これをお勧めします。
Flask-SQLAlchemy は PyPI からダウンロードできます。
宣言型
SQLAlchemyの宣言型拡張は、SQLAlchemyを使用する最新の方法です。 Djangoの動作と同様に、テーブルとモデルを一度に定義できます。 次のテキストに加えて、宣言型拡張機能に関する公式ドキュメントをお勧めします。
アプリケーションのdatabase.py
モジュールの例を次に示します。
モデルを定義するには、上記のコードで作成された Base クラスをサブクラス化します。 なぜここでスレッドを気にする必要がないのか疑問に思っている場合(上記の g オブジェクトを使用したSQLite3の例のように):これは、SQLAlchemyがすでに [を使用してスレッドを処理しているためです。 X201X]。
アプリケーションで宣言的な方法でSQLAlchemyを使用するには、次のコードをアプリケーションモジュールに配置するだけです。 Flaskは、リクエストの終了時またはアプリケーションのシャットダウン時にデータベースセッションを自動的に削除します。
モデルの例を次に示します(たとえば、これをmodels.py
に入れます)。
データベースを作成するには、 init_db 関数を使用できます。
次のようにデータベースにエントリを挿入できます。
クエリも簡単です。
手動オブジェクトリレーショナルマッピング
手動オブジェクトリレーショナルマッピングには、上からの宣言型アプローチと比較して、いくつかの利点といくつかの欠点があります。 主な違いは、テーブルとクラスを別々に定義し、それらを一緒にマップすることです。 柔軟性はありますが、入力するのに少し時間がかかります。 一般に、これは宣言型アプローチのように機能するため、アプリケーションをパッケージ内の複数のモジュールに分割することも忘れないでください。
アプリケーションのdatabase.py
モジュールの例を次に示します。
宣言型アプローチと同様に、各要求またはアプリケーションコンテキストのシャットダウン後にセッションを閉じる必要があります。 これをアプリケーションモジュールに入れます。
これがテーブルとモデルの例です(これをmodels.py
に入れてください):
クエリと挿入は、上記の例とまったく同じように機能します。
SQL抽象化レイヤー
データベースシステム(およびSQL)の抽象化レイヤーを使用したいだけの場合は、基本的にエンジンのみが必要です。
次に、上記の例のようにコードでテーブルを宣言するか、テーブルを自動的にロードします。
データを挿入するには、 insert メソッドを使用できます。 トランザクションを使用できるように、最初に接続を取得する必要があります。
SQLAlchemyは自動的にコミットします。
データベースにクエリを実行するには、エンジンを直接使用するか、接続を使用します。
これらの結果もdictのようなタプルです。
SQLステートメントの文字列をexecute()
メソッドに渡すこともできます。
SQLAlchemyの詳細については、 Webサイトにアクセスしてください。