diff --git a/database.py b/database.py index 834f998..9767818 100644 --- a/database.py +++ b/database.py @@ -10,6 +10,9 @@ DB_DIR = os.path.join(os.path.expanduser('~'), '.workbuddy', 'data', 'ziwei-powe os.makedirs(DB_DIR, exist_ok=True) DB_PATH = os.path.join(DB_DIR, 'ziwei_power.db') +# 当前数据库 schema 版本 —— 改表结构时必须 +1 并补迁移逻辑 +CURRENT_SCHEMA_VERSION = 1 + def get_conn(): conn = sqlite3.connect(DB_PATH) @@ -17,18 +20,49 @@ def get_conn(): return conn -def init_db(): - """初始化数据库表""" - conn = get_conn() +def _get_schema_version(conn): + """读取当前数据库的 schema 版本,无表时返回 0""" conn.execute(''' - CREATE TABLE IF NOT EXISTS checkins ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - date TEXT UNIQUE NOT NULL, - data TEXT NOT NULL, - created_at TEXT NOT NULL, - updated_at TEXT NOT NULL + CREATE TABLE IF NOT EXISTS schema_version ( + version INTEGER NOT NULL ) ''') + row = conn.execute('SELECT version FROM schema_version').fetchone() + return row['version'] if row else 0 + + +def _set_schema_version(conn, version): + """写入 schema 版本""" + conn.execute('DELETE FROM schema_version') + conn.execute('INSERT INTO schema_version (version) VALUES (?)', (version,)) + + +def init_db(): + """初始化数据库表 & 自动迁移""" + conn = get_conn() + current = _get_schema_version(conn) + + # ── 迁移步骤(按版本号递增)──────────────────────── + if current < 1: + # v1: 初始表结构 + conn.execute(''' + CREATE TABLE IF NOT EXISTS checkins ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + date TEXT UNIQUE NOT NULL, + data TEXT NOT NULL, + created_at TEXT NOT NULL, + updated_at TEXT NOT NULL + ) + ''') + + # ── 将来加字段/改表在此扩展 ── + # if current < 2: + # conn.execute('ALTER TABLE checkins ADD COLUMN tags TEXT DEFAULT ""') + # # 可选:对已有行做数据补全 + # conn.execute("UPDATE checkins SET tags = '[]' WHERE tags IS NULL") + + # ── 写入最新版本号 ── + _set_schema_version(conn, CURRENT_SCHEMA_VERSION) conn.commit() conn.close()