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