Files
aitsc/query_favorites.py
2025-08-29 00:34:40 +08:00

150 lines
5.6 KiB
Python

# -*- coding: utf-8 -*-
"""
收藏表查询脚本
用于查看收藏表中的数据
"""
from src.flask_prompt_master import create_app, db
from src.flask_prompt_master.models.favorites import Favorite
from sqlalchemy import func
def query_favorites():
"""查询收藏表数据"""
app = create_app()
with app.app_context():
print("=" * 60)
print("收藏表数据查询")
print("=" * 60)
try:
# 1. 基本统计
total_count = Favorite.query.count()
print(f"📊 总收藏数: {total_count}")
if total_count == 0:
print("📭 收藏表中暂无数据")
return
# 2. 按用户统计
print(f"\n👥 用户统计:")
user_stats = db.session.query(
Favorite.user_id,
func.count(Favorite.id).label('count')
).group_by(Favorite.user_id).order_by(func.count(Favorite.id).desc()).all()
for user_id, count in user_stats:
print(f" {user_id}: {count} 个收藏")
# 3. 按分类统计
print(f"\n📂 分类统计:")
category_stats = db.session.query(
Favorite.category,
func.count(Favorite.id).label('count')
).group_by(Favorite.category).order_by(func.count(Favorite.id).desc()).all()
for category, count in category_stats:
if category:
print(f" {category}: {count} 个收藏")
else:
print(f" 未分类: {count} 个收藏")
# 4. 最近收藏
print(f"\n🕒 最近收藏 (最新5个):")
recent_favorites = Favorite.query.order_by(Favorite.created_time.desc()).limit(5).all()
for i, fav in enumerate(recent_favorites, 1):
print(f" {i}. ID: {fav.id}")
print(f" 用户: {fav.user_id}")
print(f" 内容: {fav.original_text[:60]}...")
print(f" 分类: {fav.category or '未分类'}")
print(f" 时间: {fav.created_time}")
if fav.notes:
print(f" 备注: {fav.notes}")
print()
# 5. 按行业统计
print(f"\n🏢 行业统计:")
industry_stats = db.session.query(
Favorite.industry,
func.count(Favorite.id).label('count')
).group_by(Favorite.industry).order_by(func.count(Favorite.id).desc()).all()
for industry, count in industry_stats:
if industry:
print(f" {industry}: {count} 个收藏")
else:
print(f" 未指定行业: {count} 个收藏")
# 6. 按职业统计
print(f"\n💼 职业统计:")
profession_stats = db.session.query(
Favorite.profession,
func.count(Favorite.id).label('count')
).group_by(Favorite.profession).order_by(func.count(Favorite.id).desc()).all()
for profession, count in profession_stats:
if profession:
print(f" {profession}: {count} 个收藏")
else:
print(f" 未指定职业: {count} 个收藏")
# 7. 有备注的收藏
print(f"\n📝 有备注的收藏:")
noted_favorites = Favorite.query.filter(Favorite.notes.isnot(None)).filter(Favorite.notes != '').all()
print(f" 有备注的收藏数: {len(noted_favorites)}")
for fav in noted_favorites[:3]: # 只显示前3个
print(f" - ID {fav.id}: {fav.notes[:50]}...")
if len(noted_favorites) > 3:
print(f" ... 还有 {len(noted_favorites) - 3} 个有备注的收藏")
print("\n" + "=" * 60)
print("✅ 查询完成!")
print("=" * 60)
except Exception as e:
print(f"❌ 查询过程中出现错误: {str(e)}")
def search_favorites(keyword):
"""搜索收藏"""
app = create_app()
with app.app_context():
print(f"\n🔍 搜索关键词: '{keyword}'")
print("-" * 40)
try:
# 在原始文本和生成提示词中搜索
search_results = Favorite.query.filter(
db.or_(
Favorite.original_text.contains(keyword),
Favorite.generated_prompt.contains(keyword),
Favorite.notes.contains(keyword)
)
).order_by(Favorite.created_time.desc()).all()
if not search_results:
print(f"❌ 未找到包含 '{keyword}' 的收藏")
return
print(f"✅ 找到 {len(search_results)} 个相关收藏:")
for i, fav in enumerate(search_results, 1):
print(f"\n{i}. ID: {fav.id}")
print(f" 用户: {fav.user_id}")
print(f" 原始文本: {fav.original_text[:80]}...")
print(f" 分类: {fav.category or '未分类'}")
print(f" 时间: {fav.created_time}")
except Exception as e:
print(f"❌ 搜索过程中出现错误: {str(e)}")
if __name__ == '__main__':
# 基本查询
query_favorites()
# 搜索示例
search_favorites('产品')
search_favorites('设计')