import pymysql import sys # 数据库配置 config = { 'host': '122.9.150.46', 'port': 10633, 'user': 'root', 'password': 'YiXingTong2023@!', 'database': 'charging_pile_other', 'charset': 'utf8mb4' } def execute_sql(): try: # 连接数据库 print("正在连接数据库...") conn = pymysql.connect(**config) cursor = conn.cursor() print("✅ 数据库连接成功!\n") # ========== 第一步:创建表 ========== print("【第1步】创建 sys_faq 表...") cursor.execute("DROP TABLE IF EXISTS `sys_faq`") create_table_sql = """ CREATE TABLE `sys_faq` ( `faq_id` bigint NOT NULL AUTO_INCREMENT COMMENT '问题ID', `question` varchar(500) NOT NULL COMMENT '问题标题', `answer` text COMMENT '问题答案', `sort_order` int DEFAULT 0 COMMENT '排序号', `status` char(1) DEFAULT '0' COMMENT '状态(0正常 1停用)', `create_by` varchar(64) DEFAULT '' COMMENT '创建者', `create_time` datetime DEFAULT NULL COMMENT '创建时间', `update_by` varchar(64) DEFAULT '' COMMENT '更新者', `update_time` datetime DEFAULT NULL COMMENT '更新时间', `remark` varchar(500) DEFAULT NULL COMMENT '备注', `del_flag` char(1) DEFAULT '0' COMMENT '删除标志(0存在 2删除)', PRIMARY KEY (`faq_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='常见问题表' """ cursor.execute(create_table_sql) print("✅ 表创建成功") # 插入示例数据 print("【第2步】插入示例数据...") insert_data = [ (1, '如何使用充电桩?', '1. 停好车辆;2. 扫码启动充电桩;3. 连接充电枪;4. 开始充电。', 1, '0', 'admin', '0'), (2, '充电费用如何计算?', '充电费用=充电电量×电价+服务费,具体以实际订单为准。', 2, '0', 'admin', '0'), (3, '充电过程中可以拔枪吗?', '充电过程中请勿随意拔枪,如需停止充电请先在APP或充电桩上停止充电后再拔枪。', 3, '0', 'admin', '0') ] for data in insert_data: cursor.execute(""" INSERT INTO `sys_faq` (`faq_id`, `question`, `answer`, `sort_order`, `status`, `create_by`, `del_flag`) VALUES (%s, %s, %s, %s, %s, %s, %s) """, data) print(f"✅ 插入了 {len(insert_data)} 条示例数据") # ========== 第二步:删除旧菜单 ========== print("\n【第3步】删除旧菜单...") cursor.execute("DELETE FROM sys_role_menu WHERE menu_id IN (SELECT menu_id FROM sys_menu WHERE menu_name LIKE '%常见问题%')") cursor.execute("DELETE FROM sys_menu WHERE menu_name LIKE '%常见问题%'") print("✅ 旧菜单已删除") # ========== 第三步:插入主菜单 ========== print("【第4步】插入主菜单...") cursor.execute(""" INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES('常见问题管理', 1, 10, 'faq', 'system/faq/index', 1, 0, 'C', '0', '0', 'system:faq:list', 'question', 'admin', NOW(), '常见问题管理菜单') """) faq_menu_id = cursor.lastrowid print(f"✅ 主菜单已插入,ID: {faq_menu_id}") # ========== 第四步:插入按钮权限 ========== print("【第5步】插入按钮权限...") buttons = [ ('常见问题查询', 1, 'system:faq:query'), ('常见问题新增', 2, 'system:faq:add'), ('常见问题修改', 3, 'system:faq:edit'), ('常见问题删除', 4, 'system:faq:remove'), ('常见问题导出', 5, 'system:faq:export') ] for name, order, perm in buttons: cursor.execute(""" INSERT INTO sys_menu (menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, remark) VALUES(%s, %s, %s, '#', '', 1, 0, 'F', '0', '0', %s, '#', 'admin', NOW(), '') """, (name, faq_menu_id, order, perm)) print(f"✅ 插入了 {len(buttons)} 个按钮权限") # ========== 第五步:分配权限 ========== print("\n【第6步】分配权限给管理员角色...") cursor.execute(""" INSERT INTO sys_role_menu (role_id, menu_id) SELECT 1, menu_id FROM sys_menu WHERE menu_name LIKE '%常见问题%' """) print("✅ 权限已分配") # 提交事务 conn.commit() # ========== 验证结果 ========== print("\n" + "="*50) print("验证结果:") print("="*50) cursor.execute("SELECT COUNT(*) FROM sys_faq WHERE del_flag = '0'") count = cursor.fetchone()[0] print(f"✅ 示例数据数量: {count}") cursor.execute("SELECT COUNT(*) FROM sys_menu WHERE menu_name LIKE '%常见问题%'") menu_count = cursor.fetchone()[0] print(f"✅ 菜单数量: {menu_count}") cursor.execute(""" SELECT COUNT(*) FROM sys_role_menu WHERE menu_id IN (SELECT menu_id FROM sys_menu WHERE menu_name LIKE '%常见问题%') """) perm_count = cursor.fetchone()[0] print(f"✅ 已分配权限数量: {perm_count}") print("\n" + "="*50) print("🎉 所有操作执行成功!") print("="*50) print("\n接下来请:") print("1. 在IDEA中重启 ruoyi-system 服务") print("2. 清除浏览器缓存 (Ctrl + Shift + Delete)") print("3. 重新登录系统") print("4. 查看左侧菜单,应该能看到'常见问题管理'") cursor.close() conn.close() except Exception as e: print(f"❌ 执行出错: {str(e)}") import traceback traceback.print_exc() sys.exit(1) if __name__ == '__main__': execute_sql()