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