[PYTHON] Flask database settings

Introduction

This section describes the basics of Flask's database-related settings. The database shall use SQLite.

Schema settings

The table definition is as follows.

schema.sql


DROP TABLE IF EXISTS user;

CREATE TABLE user (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT UNIQUE NOT NULL,
    password TEXT NOT NULL
);

Functions for database

The database related functions are as follows.

db.py


import sqlite3

import click
from flask import current_app, g
from flask.cli import with_appcontext


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()


def init_db():
    db = get_db()

    with current_app.open_resource('schema.sql') as f:
        db.executescript(f.read().decode('utf8'))


@click.command('init-db')
@with_appcontext
def init_db_command():
    """Clear the existing data and create new tables. """
    init_db()
    click.echo('Initialized the database.')


def init_app(app):
    app.teardown_appcontext(close_db)
    app.cli.add_command(init_db_command)

Summary

Here, we explained the basics of database settings. Next time, I'll cover application settings.

Recommended Posts

Flask database settings
Flask initial settings
Flask application settings
Flask HTML template settings
flask
flask
(For myself) Flask_7 (Open database from Flask)
First Flask
samba settings
Flask memo
VIM settings