linebot_pydantic_fastapi / simple_db_test.py
mickeywu520's picture
修復商品查詢功能,解決貓砂等商品無法找到的問題
89879a0
"""
簡化的資料庫測試 - 檢查是否有貓砂相關商品
"""
import sys
import os
# 添加專案根目錄到 Python 路徑
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
def test_database_products():
"""測試資料庫中的商品資料"""
try:
from backend.database.connection import get_database_session, close_database_session
from backend.database.models import Product, Category
from sqlalchemy.orm import joinedload
from sqlalchemy import or_
print("🗄️ 連接資料庫...")
db = get_database_session()
if not db:
print("❌ 無法連接資料庫")
return
print("✅ 資料庫連接成功")
# 1. 檢查總商品數量
total_products = db.query(Product).filter(Product.is_deleted == False).count()
print(f"📊 總商品數量: {total_products}")
# 2. 檢查是否有分類
categories = db.query(Category).all()
print(f"📂 分類數量: {len(categories)}")
if categories:
print("分類列表:")
for cat in categories[:5]: # 只顯示前5個
print(f" - {cat.name}")
# 3. 搜尋貓砂相關商品
print("\n🔍 搜尋貓砂相關商品...")
search_terms = ["貓砂", "貓", "寵物", "cat", "litter", "pet"]
for term in search_terms:
print(f"\n--- 搜尋關鍵字: '{term}' ---")
# 搜尋商品名稱、編號、條碼
products = db.query(Product).options(
joinedload(Product.category)
).filter(
Product.is_deleted == False
).filter(
or_(
Product.productName.ilike(f"%{term}%"),
Product.productCode.ilike(f"%{term}%"),
Product.barcode.ilike(f"%{term}%")
)
).limit(5).all()
print(f"找到 {len(products)} 個商品:")
for product in products:
print(f" - {product.productName} (編號: {product.productCode}, 庫存: {product.stock})")
# 4. 檢查分類中是否有寵物相關
print("\n🐾 檢查寵物相關分類...")
pet_categories = db.query(Category).filter(
or_(
Category.name.ilike("%寵物%"),
Category.name.ilike("%貓%"),
Category.name.ilike("%狗%"),
Category.name.ilike("%pet%"),
Category.name.ilike("%cat%"),
Category.name.ilike("%dog%")
)
).all()
print(f"找到 {len(pet_categories)} 個寵物相關分類:")
for cat in pet_categories:
print(f" - {cat.name}")
# 檢查該分類下的商品
products_in_cat = db.query(Product).filter(
Product.category_id == cat.id,
Product.is_deleted == False
).limit(3).all()
for product in products_in_cat:
print(f" * {product.productName} (庫存: {product.stock})")
# 5. 隨機顯示一些商品名稱,看看資料庫中有什麼
print("\n📋 隨機商品樣本 (前10個):")
sample_products = db.query(Product).filter(
Product.is_deleted == False
).limit(10).all()
for i, product in enumerate(sample_products, 1):
category_name = product.category.name if product.category else "無分類"
print(f" {i}. {product.productName} ({category_name}) - 庫存: {product.stock}")
close_database_session(db)
except Exception as e:
print(f"❌ 測試錯誤: {str(e)}")
import traceback
traceback.print_exc()
def main():
"""主函數"""
print("🚀 開始簡化資料庫測試\n")
test_database_products()
print("\n✅ 測試完成!")
if __name__ == "__main__":
main()