refactor: init_db 改为 MySQL 建表语句

This commit is contained in:
2026-01-23 17:45:43 +08:00
parent 1664f88963
commit b8f55f97a6

View File

@@ -61,76 +61,78 @@ def get_connection():
def init_db():
"""初始化数据库表"""
with get_connection() as conn:
cursor = conn.cursor()
with get_connection() as (conn, cursor):
# 运动记录表
cursor.execute("""
CREATE TABLE IF NOT EXISTS exercise (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER DEFAULT 1,
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT DEFAULT 1,
date DATE NOT NULL,
type TEXT NOT NULL,
duration INTEGER NOT NULL,
calories INTEGER DEFAULT 0,
distance REAL,
heart_rate_avg INTEGER,
source TEXT DEFAULT '手动',
type VARCHAR(100) NOT NULL,
duration INT NOT NULL,
calories INT DEFAULT 0,
distance FLOAT,
heart_rate_avg INT,
source VARCHAR(50) DEFAULT '手动',
raw_data TEXT,
notes TEXT
notes TEXT,
INDEX idx_exercise_date (date)
)
""")
# 饮食记录表
cursor.execute("""
CREATE TABLE IF NOT EXISTS meal (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER DEFAULT 1,
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT DEFAULT 1,
date DATE NOT NULL,
meal_type TEXT NOT NULL,
meal_type VARCHAR(50) NOT NULL,
description TEXT,
calories INTEGER DEFAULT 0,
protein REAL,
carbs REAL,
fat REAL,
photo_path TEXT,
food_items TEXT
calories INT DEFAULT 0,
protein FLOAT,
carbs FLOAT,
fat FLOAT,
photo_path VARCHAR(500),
food_items TEXT,
INDEX idx_meal_date (date)
)
""")
# 睡眠记录表
cursor.execute("""
CREATE TABLE IF NOT EXISTS sleep (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER DEFAULT 1,
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT DEFAULT 1,
date DATE NOT NULL,
bedtime TEXT,
wake_time TEXT,
duration REAL NOT NULL,
quality INTEGER DEFAULT 3,
deep_sleep_mins INTEGER,
source TEXT DEFAULT '手动',
notes TEXT
bedtime VARCHAR(20),
wake_time VARCHAR(20),
duration FLOAT NOT NULL,
quality INT DEFAULT 3,
deep_sleep_mins INT,
source VARCHAR(50) DEFAULT '手动',
notes TEXT,
INDEX idx_sleep_date (date)
)
""")
# 体重记录表
cursor.execute("""
CREATE TABLE IF NOT EXISTS weight (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER DEFAULT 1,
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT DEFAULT 1,
date DATE NOT NULL,
weight_kg REAL NOT NULL,
body_fat_pct REAL,
muscle_mass REAL,
notes TEXT
weight_kg FLOAT NOT NULL,
body_fat_pct FLOAT,
muscle_mass FLOAT,
notes TEXT,
INDEX idx_weight_date (date)
)
""")
# 用户配置表
cursor.execute("""
CREATE TABLE IF NOT EXISTS config (
key TEXT PRIMARY KEY,
`key` VARCHAR(100) PRIMARY KEY,
value TEXT
)
""")
@@ -138,57 +140,49 @@ def init_db():
# 用户表
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL UNIQUE,
created_at TEXT NOT NULL,
is_active INTEGER DEFAULT 0,
gender TEXT,
height_cm REAL,
weight_kg REAL,
age INTEGER,
password_hash TEXT,
email TEXT,
is_admin INTEGER DEFAULT 0,
is_disabled INTEGER DEFAULT 0
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL UNIQUE,
created_at DATETIME NOT NULL,
is_active TINYINT DEFAULT 0,
gender VARCHAR(10),
height_cm FLOAT,
weight_kg FLOAT,
age INT,
password_hash VARCHAR(255),
email VARCHAR(255),
is_admin TINYINT DEFAULT 0,
is_disabled TINYINT DEFAULT 0
)
""")
# 邀请码表
cursor.execute("""
CREATE TABLE IF NOT EXISTS invites (
id INTEGER PRIMARY KEY AUTOINCREMENT,
code TEXT NOT NULL UNIQUE,
created_by INTEGER NOT NULL,
used_by INTEGER,
created_at TEXT NOT NULL,
expires_at TEXT,
FOREIGN KEY (created_by) REFERENCES users(id),
FOREIGN KEY (used_by) REFERENCES users(id)
id INT PRIMARY KEY AUTO_INCREMENT,
code VARCHAR(100) NOT NULL UNIQUE,
created_by INT NOT NULL,
used_by INT,
created_at DATETIME NOT NULL,
expires_at DATETIME
)
""")
# 阅读记录表
cursor.execute("""
CREATE TABLE IF NOT EXISTS reading (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER DEFAULT 1,
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT DEFAULT 1,
date DATE NOT NULL,
title TEXT NOT NULL,
author TEXT,
cover_url TEXT,
duration INTEGER DEFAULT 0,
mood TEXT,
notes TEXT
title VARCHAR(500) NOT NULL,
author VARCHAR(255),
cover_url VARCHAR(1000),
duration INT DEFAULT 0,
mood VARCHAR(50),
notes TEXT,
INDEX idx_reading_date (date)
)
""")
# 创建索引
cursor.execute("CREATE INDEX IF NOT EXISTS idx_exercise_date ON exercise(date)")
cursor.execute("CREATE INDEX IF NOT EXISTS idx_meal_date ON meal(date)")
cursor.execute("CREATE INDEX IF NOT EXISTS idx_sleep_date ON sleep(date)")
cursor.execute("CREATE INDEX IF NOT EXISTS idx_weight_date ON weight(date)")
cursor.execute("CREATE INDEX IF NOT EXISTS idx_reading_date ON reading(date)")
# ===== 运动记录 =====