import mysql.connector import random from datetime import datetime # 資料庫連線資訊 DB_CONFIG = { 'host': 'mysql.theaken.com', 'port': 33306, 'user': 'A019', 'password': '9wvKEkxBzVca', 'database': 'db_A019' } # 建立資料庫連線 def get_db_connection(): try: conn = mysql.connector.connect(**DB_CONFIG) return conn except mysql.connector.Error as err: print(f"資料庫連線錯誤: {err}") return None # 建立 pizzas 資料表 def create_pizzas_table(): conn = get_db_connection() if not conn: print("無法連接到資料庫") return False cursor = conn.cursor() # 建立 pizzas 資料表 create_table_query = """ CREATE TABLE IF NOT EXISTS pizzas ( id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(50) NOT NULL, price DECIMAL(10, 2) NOT NULL, size VARCHAR(2) NOT NULL, created_at DATETIME NOT NULL, updated_at DATETIME NOT NULL ) """ try: cursor.execute(create_table_query) conn.commit() print("成功建立 pizzas 資料表") return True except mysql.connector.Error as err: print(f"建立資料表錯誤: {err}") return False finally: cursor.close() conn.close() # 產生隨機 pizza 資料 def generate_random_pizzas(count=6): # Pizza 名稱列表 pizza_names = [ "夏威夷披薩", "瑪格麗特披薩", "蘑菇披薩", "臘腸披薩", "海鮮披薩", "素食披薩", "四季披薩", "墨西哥辣味披薩", "起司披薩", "燒烤雞肉披薩", "牛肉披薩", "蔬菜披薩" ] # 確保名稱不重複,如果 count 大於名稱列表長度,則使用所有可用名稱 if count > len(pizza_names): count = len(pizza_names) # 隨機選擇不重複的名稱 selected_names = random.sample(pizza_names, count) # Pizza 尺寸 pizza_sizes = ["S", "M", "L"] # 隨機生成 pizza 資料 pizzas = [] for name in selected_names: size = random.choice(pizza_sizes) # 根據尺寸設定價格範圍 if size == "S": price = round(random.uniform(200, 300), 2) elif size == "M": price = round(random.uniform(300, 400), 2) else: # L price = round(random.uniform(400, 500), 2) # 設定時間 now = datetime.now() created_at = now updated_at = now pizzas.append((name, price, size, created_at, updated_at)) return pizzas # 插入隨機 pizza 資料 def insert_random_pizzas(count=6): conn = get_db_connection() if not conn: print("無法連接到資料庫") return False cursor = conn.cursor() # 生成隨機 pizza 資料 pizzas = generate_random_pizzas(count) # 插入資料 insert_query = """ INSERT INTO pizzas (name, price, size, created_at, updated_at) VALUES (%s, %s, %s, %s, %s) """ try: cursor.executemany(insert_query, pizzas) conn.commit() print(f"成功插入 {cursor.rowcount} 筆 pizza 資料") return True except mysql.connector.Error as err: print(f"插入資料錯誤: {err}") return False finally: cursor.close() conn.close() # 顯示所有 pizza 資料 def show_all_pizzas(): conn = get_db_connection() if not conn: print("無法連接到資料庫") return cursor = conn.cursor(dictionary=True) try: cursor.execute("SELECT * FROM pizzas") pizzas = cursor.fetchall() if not pizzas: print("沒有找到任何 pizza 資料") return print("\n所有 Pizza 資料:") print("-" * 80) print(f"{'ID':<5} {'名稱':<20} {'價格':<10} {'尺寸':<5} {'建立時間':<20} {'更新時間':<20}") print("-" * 80) for pizza in pizzas: print(f"{pizza['id']:<5} {pizza['name']:<20} {pizza['price']:<10} {pizza['size']:<5} {pizza['created_at']} {pizza['updated_at']}") except mysql.connector.Error as err: print(f"查詢資料錯誤: {err}") finally: cursor.close() conn.close() # 清空 pizzas 資料表 def truncate_pizzas_table(): conn = get_db_connection() if not conn: print("無法連接到資料庫") return False cursor = conn.cursor() try: cursor.execute("TRUNCATE TABLE pizzas") conn.commit() print("成功清空 pizzas 資料表") return True except mysql.connector.Error as err: print(f"清空資料表錯誤: {err}") return False finally: cursor.close() conn.close() # 主程式 def main(): # 建立資料表 if create_pizzas_table(): # 清空資料表 if truncate_pizzas_table(): # 插入隨機資料 if insert_random_pizzas(6): # 顯示所有資料 show_all_pizzas() if __name__ == "__main__": main()