# -*- coding: utf-8 -*- """ 收藏表读写测试脚本 用于测试收藏功能的增删改查操作 """ from src.flask_prompt_master import create_app, db from src.flask_prompt_master.models.favorites import Favorite from datetime import datetime import json def test_favorites_table(): """测试收藏表的读写操作""" app = create_app() with app.app_context(): print("=" * 50) print("收藏表读写测试") print("=" * 50) try: # 1. 测试插入数据 print("\n1. 测试插入收藏数据...") test_favorites = [ { 'user_id': '192.168.1.100', 'template_id': 1, 'original_text': '如何写一个产品需求文档', 'generated_prompt': '作为产品经理,请按照以下结构编写产品需求文档:\n1. 产品概述\n2. 用户故事\n3. 功能需求\n4. 非功能需求\n5. 验收标准', 'system_prompt': '你是一个专业的产品经理', 'category': '产品管理', 'industry': '互联网', 'profession': '产品经理', 'tags': json.dumps(['PRD', '产品文档', '需求分析']), 'notes': '这是一个测试收藏,用于验证功能' }, { 'user_id': '192.168.1.100', 'template_id': 2, 'original_text': '设计一个用户注册流程', 'generated_prompt': '请设计一个简洁高效的用户注册流程,包含:\n1. 注册入口\n2. 信息收集\n3. 验证流程\n4. 完成页面\n5. 异常处理', 'system_prompt': '你是一个UX设计师', 'category': '创意设计', 'industry': '互联网', 'profession': '设计师', 'tags': json.dumps(['UX', '注册流程', '用户体验']), 'notes': '注册流程设计参考' }, { 'user_id': '192.168.1.101', 'template_id': 3, 'original_text': '感冒咳嗽吃什么药', 'generated_prompt': '作为呼吸内科医生,请为普通成年患者提供感冒咳嗽的药物选择建议...', 'system_prompt': '你是一个专业的医疗提示词专家', 'category': '专业服务', 'industry': '医疗健康', 'profession': '医生', 'tags': json.dumps(['医疗', '感冒', '药物建议']), 'notes': '医疗咨询参考' } ] for i, fav_data in enumerate(test_favorites, 1): favorite = Favorite(**fav_data) db.session.add(favorite) print(f" 插入收藏 {i}: {fav_data['original_text'][:30]}...") db.session.commit() print(" ✅ 插入数据成功!") # 2. 测试查询数据 print("\n2. 测试查询收藏数据...") # 查询所有收藏 all_favorites = Favorite.query.all() print(f" 总收藏数: {len(all_favorites)}") # 按用户ID查询 user_favorites = Favorite.query.filter_by(user_id='192.168.1.100').all() print(f" 用户 192.168.1.100 的收藏数: {len(user_favorites)}") # 按分类查询 category_favorites = Favorite.query.filter_by(category='产品管理').all() print(f" 产品管理分类的收藏数: {len(category_favorites)}") # 按关键词搜索 search_favorites = Favorite.query.filter( Favorite.original_text.contains('产品') ).all() print(f" 包含'产品'关键词的收藏数: {len(search_favorites)}") # 3. 测试更新数据 print("\n3. 测试更新收藏数据...") if all_favorites: first_favorite = all_favorites[0] old_notes = first_favorite.notes first_favorite.notes = "这是更新后的备注 - " + datetime.now().strftime('%H:%M:%S') db.session.commit() print(f" 更新收藏ID {first_favorite.id} 的备注") print(f" 原备注: {old_notes}") print(f" 新备注: {first_favorite.notes}") # 4. 测试统计功能 print("\n4. 测试统计功能...") # 总收藏数 total_count = Favorite.query.count() print(f" 总收藏数: {total_count}") # 按分类统计 from sqlalchemy import func category_stats = db.session.query( Favorite.category, func.count(Favorite.id) ).group_by(Favorite.category).all() print(" 分类统计:") for category, count in category_stats: print(f" {category}: {count} 个") # 按用户统计 user_stats = db.session.query( Favorite.user_id, func.count(Favorite.id) ).group_by(Favorite.user_id).all() print(" 用户统计:") for user_id, count in user_stats: print(f" {user_id}: {count} 个") # 5. 测试删除数据 print("\n5. 测试删除收藏数据...") if len(all_favorites) > 2: # 删除最后一个收藏 last_favorite = all_favorites[-1] favorite_id = last_favorite.id original_text = last_favorite.original_text[:30] db.session.delete(last_favorite) db.session.commit() print(f" 删除收藏ID {favorite_id}: {original_text}...") # 验证删除 deleted_favorite = Favorite.query.get(favorite_id) if deleted_favorite is None: print(" ✅ 删除成功!") else: print(" ❌ 删除失败!") # 6. 显示最终数据 print("\n6. 最终数据展示...") final_favorites = Favorite.query.order_by(Favorite.created_time.desc()).limit(5).all() print(" 最近5个收藏:") for i, fav in enumerate(final_favorites, 1): print(f" {i}. ID: {fav.id}") print(f" 用户: {fav.user_id}") print(f" 内容: {fav.original_text[:50]}...") print(f" 分类: {fav.category}") print(f" 时间: {fav.created_time}") print(f" 备注: {fav.notes}") print() print("=" * 50) print("✅ 收藏表读写测试完成!") print("=" * 50) except Exception as e: print(f"❌ 测试过程中出现错误: {str(e)}") db.session.rollback() raise def show_table_structure(): """显示表结构""" app = create_app() with app.app_context(): print("=" * 50) print("收藏表结构信息") print("=" * 50) try: # 获取表信息 from sqlalchemy import inspect inspector = inspect(db.engine) # 检查表是否存在 tables = inspector.get_table_names() if 'favorites' in tables: print("✅ favorites表存在") # 获取列信息 columns = inspector.get_columns('favorites') print(f"\n表结构 ({len(columns)} 列):") for col in columns: print(f" {col['name']}: {col['type']} ({'可空' if col['nullable'] else '非空'})") if col.get('comment'): print(f" 注释: {col['comment']}") # 获取索引信息 indexes = inspector.get_indexes('favorites') if indexes: print(f"\n索引信息 ({len(indexes)} 个):") for idx in indexes: print(f" {idx['name']}: {idx['column_names']} ({'唯一' if idx['unique'] else '非唯一'})") else: print("\n索引信息: 无") else: print("❌ favorites表不存在") except Exception as e: print(f"❌ 获取表结构时出现错误: {str(e)}") if __name__ == '__main__': # 显示表结构 show_table_structure() # 运行测试 test_favorites_table()