Files
auv/backend/database.py
T
2026-07-05 21:29:17 +08:00

66 lines
1.7 KiB
Python

import sqlite3
import os
DB_PATH = os.path.join(os.path.dirname(__file__), "stock_data.db")
SCHEMA_SQL = """
CREATE TABLE IF NOT EXISTS stock_collections (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
description TEXT,
user_id TEXT NOT NULL DEFAULT '',
last_accessed_at TEXT NOT NULL DEFAULT (datetime('now','localtime')),
created_at TEXT NOT NULL DEFAULT (datetime('now','localtime')),
updated_at TEXT NOT NULL DEFAULT (datetime('now','localtime'))
);
CREATE TABLE IF NOT EXISTS collection_stocks (
id INTEGER PRIMARY KEY AUTOINCREMENT,
collection_id INTEGER NOT NULL REFERENCES stock_collections(id) ON DELETE CASCADE,
stock_code TEXT NOT NULL,
stock_name TEXT NOT NULL,
added_price REAL,
added_at TEXT NOT NULL DEFAULT (datetime('now','localtime')),
UNIQUE(collection_id, stock_code)
);
CREATE TABLE IF NOT EXISTS share_links (
id INTEGER PRIMARY KEY AUTOINCREMENT,
collection_id INTEGER NOT NULL REFERENCES stock_collections(id) ON DELETE CASCADE,
short_code TEXT NOT NULL UNIQUE,
created_at TEXT NOT NULL DEFAULT (datetime('now','localtime')),
expires_at TEXT
);
CREATE TABLE IF NOT EXISTS cache (
key TEXT PRIMARY KEY,
value TEXT NOT NULL,
expires_at TEXT NOT NULL
);
"""
def get_connection() -> sqlite3.Connection:
conn = sqlite3.connect(DB_PATH)
conn.row_factory = sqlite3.Row
conn.execute("PRAGMA foreign_keys = ON")
return conn
def init_db():
conn = get_connection()
conn.executescript(SCHEMA_SQL)
# 清理过期缓存
from services.cache import clean_expired
clean_expired()
conn.commit()
conn.close()
def dict_from_row(row: sqlite3.Row) -> dict:
if row is None:
return None
return dict(row)