48 lines
1.2 KiB
Python
48 lines
1.2 KiB
Python
import sqlite3
|
|
from flask import g
|
|
from web.config import Config
|
|
|
|
def get_db(db_name):
|
|
"""
|
|
db_name: 'l2', 'l3', or 'web'
|
|
"""
|
|
db_attr = f'db_{db_name}'
|
|
db = getattr(g, db_attr, None)
|
|
|
|
if db is None:
|
|
if db_name == 'l2':
|
|
path = Config.DB_L2_PATH
|
|
elif db_name == 'l3':
|
|
path = Config.DB_L3_PATH
|
|
elif db_name == 'web':
|
|
path = Config.DB_WEB_PATH
|
|
else:
|
|
raise ValueError(f"Unknown database: {db_name}")
|
|
|
|
# Connect with check_same_thread=False if needed for dev, but default is safer per thread
|
|
db = sqlite3.connect(path)
|
|
db.row_factory = sqlite3.Row
|
|
setattr(g, db_attr, db)
|
|
|
|
return db
|
|
|
|
def close_dbs(e=None):
|
|
for db_name in ['l2', 'l3', 'web']:
|
|
db_attr = f'db_{db_name}'
|
|
db = getattr(g, db_attr, None)
|
|
if db is not None:
|
|
db.close()
|
|
|
|
def query_db(db_name, query, args=(), one=False):
|
|
cur = get_db(db_name).execute(query, args)
|
|
rv = cur.fetchall()
|
|
cur.close()
|
|
return (rv[0] if rv else None) if one else rv
|
|
|
|
def execute_db(db_name, query, args=()):
|
|
db = get_db(db_name)
|
|
cur = db.execute(query, args)
|
|
db.commit()
|
|
cur.close()
|
|
return cur.lastrowid
|