优化数据

This commit is contained in:
rjb
2025-10-07 00:58:53 +08:00
parent 690dd42adc
commit 3ebcb77ca9
23 changed files with 13031 additions and 31 deletions

271
init_tencent_db.py Normal file
View File

@@ -0,0 +1,271 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
腾讯云数据库初始化脚本
独立运行不依赖Flask应用
"""
import pymysql
import sys
import os
# 添加项目根目录到Python路径
project_root = os.path.dirname(os.path.abspath(__file__))
sys.path.append(project_root)
def get_templates():
"""获取模板数据"""
# 从promptsTemplates.py文件导入模板数据
try:
from src.flask_prompt_master.promptsTemplates import templates
return templates
except ImportError:
print("❌ 无法导入模板数据,请确保在项目根目录运行此脚本")
return []
def init_tencent_database(force_insert=False):
"""初始化腾讯云数据库"""
print("🚀 开始初始化腾讯云数据库...")
# 腾讯云数据库配置
config = {
'host': 'gz-cynosdbmysql-grp-d26pzce5.sql.tencentcdb.com',
'port': 24936,
'user': 'root',
'password': '!Rjb12191',
'database': 'pro_db',
'charset': 'utf8mb4'
}
try:
# 连接数据库
print("🔗 连接到腾讯云数据库...")
conn = pymysql.connect(**config)
cursor = conn.cursor()
print("✅ 数据库连接成功")
# 创建 prompt_template 表
print("📋 创建 prompt_template 表...")
cursor.execute("""
CREATE TABLE IF NOT EXISTS prompt_template (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
description TEXT,
category VARCHAR(50),
industry VARCHAR(50),
profession VARCHAR(50),
sub_category VARCHAR(50),
system_prompt TEXT NOT NULL,
is_default BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
""")
print("✅ prompt_template 表创建/检查完成")
# 检查是否已有模板数据
cursor.execute("SELECT COUNT(*) FROM prompt_template")
count = cursor.fetchone()[0]
if count == 0:
print("📝 开始插入模板数据...")
# 获取模板数据
templates = get_templates()
if not templates:
print("❌ 无法获取模板数据,退出")
return
# 插入模板数据
sql = """
INSERT INTO prompt_template
(name, description, category, industry, profession, sub_category, system_prompt, is_default)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
"""
success_count = 0
error_count = 0
for template in templates:
try:
cursor.execute(sql, (
template['name'],
template['description'],
template.get('category', ''),
template.get('industry', ''),
template.get('profession', ''),
template.get('sub_category', ''),
template['system_prompt'],
template.get('is_default', False)
))
success_count += 1
except Exception as e:
print(f"⚠️ 插入模板 '{template['name']}' 失败: {str(e)}")
error_count += 1
print(f"✅ 成功插入 {success_count} 个模板数据!")
if error_count > 0:
print(f"⚠️ {error_count} 个模板插入失败")
else:
print(f" 模板数据已存在 ({count} 条记录),跳过初始化。")
# 提交事务
conn.commit()
print("🎉 腾讯云数据库初始化完成!")
except Exception as e:
print(f"❌ 初始化数据库失败: {str(e)}")
import traceback
traceback.print_exc()
if 'conn' in locals():
conn.rollback()
finally:
if 'cursor' in locals():
cursor.close()
if 'conn' in locals():
conn.close()
def init_local_database():
"""初始化本地数据库"""
print("🚀 开始初始化本地数据库...")
# 本地数据库配置
config = {
'host': 'localhost',
'user': 'root',
'password': '123456',
'database': 'pro_db',
'charset': 'utf8mb4'
}
try:
# 连接数据库
print("🔗 连接到本地数据库...")
conn = pymysql.connect(**config)
cursor = conn.cursor()
print("✅ 数据库连接成功")
# 创建 prompt_template 表
print("📋 创建 prompt_template 表...")
cursor.execute("""
CREATE TABLE IF NOT EXISTS prompt_template (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100) NOT NULL,
description TEXT,
category VARCHAR(50),
industry VARCHAR(50),
profession VARCHAR(50),
sub_category VARCHAR(50),
system_prompt TEXT NOT NULL,
is_default BOOLEAN DEFAULT FALSE,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
""")
print("✅ prompt_template 表创建/检查完成")
# 检查是否已有模板数据
cursor.execute("SELECT COUNT(*) FROM prompt_template")
count = cursor.fetchone()[0]
if count == 0:
print("📝 开始插入模板数据...")
# 获取模板数据
templates = get_templates()
if not templates:
print("❌ 无法获取模板数据,退出")
return
# 插入模板数据
sql = """
INSERT INTO prompt_template
(name, description, category, industry, profession, sub_category, system_prompt, is_default)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s)
"""
success_count = 0
error_count = 0
for template in templates:
try:
cursor.execute(sql, (
template['name'],
template['description'],
template.get('category', ''),
template.get('industry', ''),
template.get('profession', ''),
template.get('sub_category', ''),
template['system_prompt'],
template.get('is_default', False)
))
success_count += 1
except Exception as e:
print(f"⚠️ 插入模板 '{template['name']}' 失败: {str(e)}")
error_count += 1
print(f"✅ 成功插入 {success_count} 个模板数据!")
if error_count > 0:
print(f"⚠️ {error_count} 个模板插入失败")
else:
print(f" 模板数据已存在 ({count} 条记录),跳过初始化。")
# 提交事务
conn.commit()
print("🎉 本地数据库初始化完成!")
except Exception as e:
print(f"❌ 初始化数据库失败: {str(e)}")
import traceback
traceback.print_exc()
if 'conn' in locals():
conn.rollback()
finally:
if 'cursor' in locals():
cursor.close()
if 'conn' in locals():
conn.close()
def main():
"""主函数"""
print("=" * 60)
print("🗄️ 数据库初始化工具")
print("=" * 60)
if len(sys.argv) > 1:
db_type = sys.argv[1].lower()
if db_type in ['tencent', 't']:
init_tencent_database()
elif db_type in ['local', 'l']:
init_local_database()
else:
print("❌ 无效的数据库类型参数")
print("用法: python init_tencent_db.py [local|tencent]")
print(" local 或 l - 初始化本地数据库")
print(" tencent 或 t - 初始化腾讯云数据库")
sys.exit(1)
else:
# 交互式选择
while True:
print("\n请选择要初始化的数据库:")
print("1. 本地数据库 (localhost)")
print("2. 腾讯云数据库")
print("3. 退出")
choice = input("\n请输入选择 (1-3): ").strip()
if choice == '1':
print("\n" + "="*40)
init_local_database()
print("="*40)
break
elif choice == '2':
print("\n" + "="*40)
init_tencent_database()
print("="*40)
break
elif choice == '3':
print("👋 退出程序")
break
else:
print("❌ 无效选择,请重新输入")
if __name__ == '__main__':
main()