12億円ほしい人のブログ

メガBIG当たらないかな

Flaskチュートリアルのメモ1

以下のサイトでFlaskについて勉強中です。

msiz07-flask-docs-ja.readthedocs.io

サイト内の以下コードについての調査メモです。

import sqlite3

import click
from flask import current_app, g


def get_db():
    if 'db' not in g:
        g.db = sqlite3.connect(
            current_app.config['DATABASE'],
            detect_types=sqlite3.PARSE_DECLTYPES
        )
        g.db.row_factory = sqlite3.Row

    return g.db


def close_db(e=None):
    db = g.pop('db', None)

    if db is not None:
        db.close()

'db' not in g

gはリクエストごとに使用する一時的なデータを格納できるオブジェクトとのこと。
データを、キーと値のペアである辞書として持っている。
辞書のように操作できるように実装されているため、in演算子を使用して'db'キーがあるかを確認できる。

detect_types=sqlite3.PARSE_DECLTYPES

データベースの各列の値の型を自動的に解釈して、適切なPythonの型に変換できるオプション。

g.db.row_factory = sqlite3.Row

SELECTした結果を参照する方法をrow_factoryにて指定できる(?)。
ここにsqlite3.Rowを指定することで、SELECTした行をsqlite3.Rowオブジェクトとして扱える。
sqlite3.Rowとして扱うと、カラム名に基づいて値を参照できる。

sqlite3 --- SQLite データベースに対する DB-API 2.0 インターフェース — Python 3.9.17 ドキュメント