FlaskでSQLite3を使用する
Flaskでは、データベース接続をオンデマンドで開き、コンテキストが終了したときに(通常はリクエストの最後に)閉じるように簡単に実装できます。
以下は、FlaskでSQLite3を使用する方法の簡単な例です。
ここで、データベースを使用するには、アプリケーションにアクティブなアプリケーションコンテキスト(実行中の要求がある場合は常にtrue)があるか、アプリケーションコンテキスト自体を作成する必要があります。 その時点で、get_db
関数を使用して現在のデータベース接続を取得できます。 コンテキストが破棄されるたびに、データベース接続は終了します。
注:Flask 0.9以前を使用する場合は、 Flask.g オブジェクトがアプリケーションコンテキストではなくリクエストにバインドされているため、g
ではなくflask._app_ctx_stack.top
を使用する必要があります。
例:
ノート
before-requestハンドラーが失敗した場合や実行されなかった場合でも、ティアダウン要求関数とappcontext関数は常に実行されることに注意してください。 このため、データベースを閉じる前に、データベースがそこにあることを確認する必要があります。
オンデマンド接続
このアプローチ(最初の使用時に接続する)の利点は、本当に必要な場合にのみ接続を開くことです。 このコードをリクエストコンテキストの外部で使用する場合は、アプリケーションコンテキストを手動で開くことにより、Pythonシェルで使用できます。
簡単なクエリ
これで、各リクエスト処理関数で get_db()にアクセスして、現在開いているデータベース接続を取得できます。 SQLiteの操作を簡素化するには、行ファクトリ関数が役立ちます。 これは、データベースから返されたすべての結果に対して実行され、結果を変換します。 たとえば、タプルの代わりに辞書を取得するために、これを上記で作成したget_db
関数に挿入できます。
これにより、sqlite3モジュールはこのデータベース接続のdictを返すようになり、処理がはるかに簡単になります。 さらに簡単に言うと、代わりにこれをget_db
に配置できます。
これは、クエリの結果を返すためにdictではなくRowオブジェクトを使用します。 これらはnamedtuple
であるため、インデックスまたはキーのいずれかでアクセスできます。 たとえば、行id
、FirstName
、LastName
、およびMiddleInitial
にr
というsqlite3.Row
があるとします。 ]:
さらに、カーソルの取得、実行、および結果のフェッチを組み合わせたクエリ関数を提供することをお勧めします。
この便利な小さな関数を行ファクトリと組み合わせると、生のカーソルと接続オブジェクトを使用するよりもはるかに快適にデータベースを操作できます。
使用方法は次のとおりです。
または、単一の結果が必要な場合:
変数部分をSQLステートメントに渡すには、ステートメントで疑問符を使用し、引数をリストとして渡します。 SQLインジェクションを使用してアプリケーションを攻撃する可能性があるため、文字列形式でSQLステートメントに直接追加しないでください。
初期スキーマ
リレーショナルデータベースにはスキーマが必要なため、アプリケーションはデータベースを作成する schema.sql ファイルを出荷することがよくあります。 そのスキーマに基づいてデータベースを作成する関数を提供することをお勧めします。 この関数はあなたのためにそれをすることができます:
次に、Pythonシェルからそのようなデータベースを作成できます。