lotto-lab: DB 스키마 확장 — purchase_history ALTER + strategy 테이블 추가
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -197,6 +197,69 @@ def init_db() -> None:
|
||||
)
|
||||
conn.execute("CREATE INDEX IF NOT EXISTS idx_purchase_draw ON purchase_history(draw_no DESC);")
|
||||
|
||||
# ── purchase_history 컬럼 확장 (기존 데이터 보존) ──────────────────────
|
||||
_ensure_column(conn, "purchase_history", "numbers",
|
||||
"ALTER TABLE purchase_history ADD COLUMN numbers TEXT NOT NULL DEFAULT '[]'")
|
||||
_ensure_column(conn, "purchase_history", "is_real",
|
||||
"ALTER TABLE purchase_history ADD COLUMN is_real INTEGER NOT NULL DEFAULT 1")
|
||||
_ensure_column(conn, "purchase_history", "source_strategy",
|
||||
"ALTER TABLE purchase_history ADD COLUMN source_strategy TEXT NOT NULL DEFAULT 'manual'")
|
||||
_ensure_column(conn, "purchase_history", "source_detail",
|
||||
"ALTER TABLE purchase_history ADD COLUMN source_detail TEXT NOT NULL DEFAULT '{}'")
|
||||
_ensure_column(conn, "purchase_history", "checked",
|
||||
"ALTER TABLE purchase_history ADD COLUMN checked INTEGER NOT NULL DEFAULT 0")
|
||||
_ensure_column(conn, "purchase_history", "results",
|
||||
"ALTER TABLE purchase_history ADD COLUMN results TEXT NOT NULL DEFAULT '[]'")
|
||||
_ensure_column(conn, "purchase_history", "total_prize",
|
||||
"ALTER TABLE purchase_history ADD COLUMN total_prize INTEGER NOT NULL DEFAULT 0")
|
||||
|
||||
# ── strategy_performance 테이블 ────────────────────────────────────────
|
||||
conn.execute(
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS strategy_performance (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
strategy TEXT NOT NULL,
|
||||
draw_no INTEGER NOT NULL,
|
||||
sets_count INTEGER NOT NULL DEFAULT 0,
|
||||
total_correct INTEGER NOT NULL DEFAULT 0,
|
||||
max_correct INTEGER NOT NULL DEFAULT 0,
|
||||
prize_total INTEGER NOT NULL DEFAULT 0,
|
||||
avg_score REAL NOT NULL DEFAULT 0.0,
|
||||
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now')),
|
||||
UNIQUE(strategy, draw_no)
|
||||
);
|
||||
"""
|
||||
)
|
||||
|
||||
# ── strategy_weights 테이블 ────────────────────────────────────────────
|
||||
conn.execute(
|
||||
"""
|
||||
CREATE TABLE IF NOT EXISTS strategy_weights (
|
||||
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
||||
strategy TEXT NOT NULL UNIQUE,
|
||||
weight REAL NOT NULL DEFAULT 0.2,
|
||||
ema_score REAL NOT NULL DEFAULT 0.15,
|
||||
total_sets INTEGER NOT NULL DEFAULT 0,
|
||||
total_hits_3plus INTEGER NOT NULL DEFAULT 0,
|
||||
updated_at TEXT NOT NULL DEFAULT (strftime('%Y-%m-%dT%H:%M:%fZ','now'))
|
||||
);
|
||||
"""
|
||||
)
|
||||
|
||||
# strategy_weights 초기값 시드 (이미 있으면 무시)
|
||||
_INIT_WEIGHTS = [
|
||||
("combined", 0.30, 0.15),
|
||||
("simulation", 0.25, 0.15),
|
||||
("heatmap", 0.20, 0.15),
|
||||
("manual", 0.15, 0.15),
|
||||
("custom", 0.10, 0.15),
|
||||
]
|
||||
for strat, w, ema in _INIT_WEIGHTS:
|
||||
conn.execute(
|
||||
"INSERT OR IGNORE INTO strategy_weights (strategy, weight, ema_score) VALUES (?, ?, ?)",
|
||||
(strat, w, ema),
|
||||
)
|
||||
|
||||
# ── weekly_reports 캐시 테이블 ──────────────────────────────────────────
|
||||
conn.execute(
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user