Spaces:
Running
Running
from .database import Base, engine, SessionLocal | |
from .models.meal_log import MealLog | |
from .models.nutrition import Nutrition | |
import json | |
def init_db(): | |
"""初始化資料庫並填入初始營養數據""" | |
print("Creating database tables...") | |
# 根據模型建立所有表格 | |
Base.metadata.create_all(bind=engine) | |
print("Database tables created successfully!") | |
# 檢查是否已有資料,避免重複新增 | |
db = SessionLocal() | |
if db.query(Nutrition).count() == 0: | |
print("Populating nutrition table with initial data...") | |
# 從 main.py 移植過來的模擬資料 | |
mock_nutrition_data = [ | |
{ | |
"food_name": "hamburger", "chinese_name": "漢堡", "calories": 540, "protein": 25, "fat": 31, "carbs": 40, | |
"fiber": 3, "sugar": 6, "sodium": 1040, "health_score": 45, | |
"recommendations": ["脂肪和鈉含量過高,建議減少食用頻率。"], | |
"warnings": ["高熱量", "高脂肪", "高鈉"] | |
}, | |
{ | |
"food_name": "pizza", "chinese_name": "披薩", "calories": 266, "protein": 11, "fat": 10, "carbs": 33, | |
"fiber": 2, "sugar": 4, "sodium": 598, "health_score": 65, | |
"recommendations": ["可搭配沙拉以增加纖維攝取。"], | |
"warnings": ["高鈉"] | |
}, | |
{ | |
"food_name": "sushi", "chinese_name": "壽司", "calories": 200, "protein": 12, "fat": 8, "carbs": 20, | |
"fiber": 1, "sugar": 2, "sodium": 380, "health_score": 85, | |
"recommendations": ["優質的蛋白質和碳水化合物來源。"], | |
"warnings": [] | |
}, | |
{ | |
"food_name": "fried rice", "chinese_name": "炒飯", "calories": 238, "protein": 8, "fat": 12, "carbs": 26, | |
"fiber": 2, "sugar": 3, "sodium": 680, "health_score": 60, | |
"recommendations": ["注意油脂和鈉含量。"], | |
"warnings": ["高鈉"] | |
}, | |
{ | |
"food_name": "chicken wings", "chinese_name": "雞翅", "calories": 203, "protein": 18, "fat": 14, "carbs": 0, | |
"fiber": 0, "sugar": 0, "sodium": 380, "health_score": 70, | |
"recommendations": ["蛋白質的良好來源。"], | |
"warnings": [] | |
}, | |
{ | |
"food_name": "salad", "chinese_name": "沙拉", "calories": 33, "protein": 3, "fat": 0.2, "carbs": 6, | |
"fiber": 3, "sugar": 3, "sodium": 65, "health_score": 95, | |
"recommendations": ["低熱量高纖維,是健康的選擇。"], | |
"warnings": [] | |
} | |
] | |
for food_data in mock_nutrition_data: | |
db_item = Nutrition(**food_data) | |
db.add(db_item) | |
db.commit() | |
print(f"{len(mock_nutrition_data)} items populated.") | |
else: | |
print("Nutrition table already contains data. Skipping population.") | |
db.close() | |
if __name__ == "__main__": | |
init_db() | |