-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathdb.py
87 lines (71 loc) · 2.17 KB
/
db.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
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