refactor: init_db 改为 MySQL 建表语句
This commit is contained in:
@@ -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)")
|
||||
|
||||
|
||||
# ===== 运动记录 =====
|
||||
|
||||
|
||||
Reference in New Issue
Block a user