import sqlite3 from flask import current_app, g from flask.cli import with_appcontext import click from datetime import datetime from os import path def get_db(): try: 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 except RuntimeError: db = sqlite3.connect( './instance/map.sqlite', detect_types=sqlite3.PARSE_DECLTYPES ) db.row_factory = sqlite3.Row return db def close_db(e=None): db = g.pop('db', None) if db is not None: db.close() def init_db(): db = get_db() try: with current_app.open_resource('schema.sql') as f: db.executescript(f.read().decode('utf8')) except RuntimeError: with open(path.join(path.dirname(path.realpath(__file__)), 'schema.sql')) as f: db.executescript(f.read()) @click.command('init-db') @with_appcontext def init_db_command(): init_db() click.echo('DB initialized') def init_app(app): app.teardown_appcontext(close_db) app.cli.add_command(init_db_command) def select_all_data(): # prints and returns all data from data table db = get_db() all_data = db.execute( 'SELECT id, location, latitude, longitude, created FROM data' ).fetchall() print('selected data: ') for each in all_data: print(' ', each['id'], each['location'], each['latitude'], each['longitude'], each['created']) return all_data def insert_into_data(location, latitude, longitude): db = get_db() db.execute( 'INSERT INTO data (location, latitude, longitude, created) VALUES (?, ?, ?, ?)', (location, latitude, longitude, datetime.utcnow()) ) db.commit() return True def select_map_data(): # used for MarkerCluster points generation db = get_db() all_data = db.execute( 'SELECT latitude, longitude FROM data' ).fetchall() map_data = [] for each in all_data: map_data.append([each['latitude'], each['longitude']]) return map_data