File size: 3,096 Bytes
89b8989
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
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()