You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
848 B
44 lines
848 B
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('initdb.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) |
|
|
|
|