Files
Class_0908/create_pizzas_table.py
2025-09-08 16:23:54 +08:00

191 lines
5.1 KiB
Python

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()