Files
yrtv/web/database.py

48 lines
1.2 KiB
Python
Raw Normal View History

2026-01-26 02:13:06 +08:00
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