一个初始化数据Python脚本

news/2024/12/1 10:43:35/
python">import mysql.connector
from mysql.connector import Error
from datetime import datetime# 数据库配置
db_config = {'host': 'xxx','user': 'xxx','password': 'xxx','database': 'xxx','port': 3306
}# 起始 ID,初始值为你要求的值
current_id = 745689123879789456# 生成当前时间
current_time = datetime.now().strftime('%Y-%m-%d %H:%M:%S')# 连接数据库
def create_connection():connection = Nonetry:connection = mysql.connector.connect(**db_config)if connection.is_connected():print("连接 MySQL 数据库成功")except Error as e:print(f"Error: '{e}'")return connection# 递归查找完整的 ID 链路
def get_id_path(cursor, org_id):id_path = []name_path = []while org_id:# 查找当前组织的 id, name, parent_idquery = """SELECT id, name, parent_idFROM t_departWHERE id = %s"""cursor.execute(query, (org_id,))result = cursor.fetchone()if result:current_id, name, parent_id = resultid_path.insert(0, current_id)  # 从前插入,保持从根到当前的顺序name_path.insert(0, name)  # 同时记录 name_pathorg_id = parent_id  # 更新为上级组织的 parent_id,继续递归else:breakreturn id_path, name_path# 根据 code 查找对应的组织 id
def get_org_id_by_code(cursor, code):query = """SELECT idFROM t_departWHERE code = %s"""cursor.execute(query, (code,))result = cursor.fetchone()return result[0] if result else None# 生成插入 SQL 语句
def generate_insert_sql(identity_id, code_list, cursor):global current_id  # 引用全局变量global current_time # 引用全局变量scope_entries = []display = []display_label = []# 对于每个 code,查找其对应的组织 id,然后递归查找完整的 id 链路for code in code_list:org_id = get_org_id_by_code(cursor, code)if org_id:# 查找完整的 id 链路和 name 链路id_path, name_path = get_id_path(cursor, org_id)# 计算层级 levellevel = len(id_path)# 添加到 scope_value 中的项scope_entries.append(f'{{"scopeKey":"{org_id}","brandCode":"","uniqueCode":"","level":"{level}","type":""}}')# 添加到 display 和 display_label 中的项display.append(id_path)display_label.append(name_path)# 将 scope_entries, display, display_label 转换成字符串格式scope_value = f'[{",".join(scope_entries)}]'display_value = f'{display}'.replace("'", "\"")  # 转为双引号的 JSON 格式display_label_value = f'{display_label}'.replace("'", "\"")# 生成插入 SQL 语句,并使用当前的唯一递增 IDinsert_sql = f"""INSERT INTO `ram`.`t_data_scope` (`id`, `app_id`, `identity_id`, `scope_type`, `scope_value`, `scope_operating_type`, `status`, `remark`, `create_time`, `create_by`, `update_time`, `update_by`, `deleted`, `version`, `delete_time`, `display`, `display_label`) VALUES ('{current_id}', '10000', '{identity_id}', 'depart', '{scope_value}', '行政组织', 1, NULL, '{current_time}', 'script', '{current_time}', 'script', 0, NULL, NULL, '{display_value}', '{display_label_value}');"""# 每次生成 SQL 后递增 current_idcurrent_id += 1return insert_sql# 主函数,处理 t_depart_collect 中的数据
def process_collect_data(connection):cursor = connection.cursor()# 查询 t_depart_collect 表中的所有数据,测试时先只查前几条数据cursor.execute("SELECT identity_id, code FROM ram.t_depart_collect where exist = 1")rows = cursor.fetchall()with open("initDepartDataScope_SIT.sql", 'w', encoding='utf-8') as file:  # 打开文件以写入模式# 处理每一条记录for row in rows:identity_id, code_str = row# 分割 code 字符串,处理多个组织编码code_list = code_str.split('、')  # 使用 '、' 进行分割# 打印删除语句delete_sql = f"""DELETE FROM `ram`.`t_data_scope` WHERE scope_type = 'depart' AND identity_id = '{identity_id}';"""print(delete_sql)file.write(delete_sql + '\n')  # 将 SQL 语句写入文件,每条 SQL 语句换行insert_sql = generate_insert_sql(identity_id, code_list, cursor)print(insert_sql)  # 可以将其执行到数据库,或写入文件file.write(insert_sql + '\n')  # 将 SQL 语句写入文件,每条 SQL 语句换行cursor.close()# 运行程序
if __name__ == "__main__":connection = create_connection()if connection is not None and connection.is_connected():try:process_collect_data(connection)finally:connection.close()print("数据库连接已关闭")

http://www.ppmy.cn/news/1551465.html

相关文章

unity3d———xml 存储数据例子

1.代码示例: public void SaveData(string fileName){//决定存储路径string path Application.persistentDataPath "/" fileName ".xml";Debug.Log(Application.persistentDataPath);//5个步骤//1.创建我们的Xml文本 XmlDocument xml new…

Apache Flink从Kafka中消费商品数据,并进行商品分类的数量统计题

使用Apache Flink从Kafka中消费商品数据,并进行商品分类的数量统计是一个典型的流处理任务。以下是一个详细的步骤指南和示例代码,帮助你实现这一功能。 ### 前提条件 1. **安装Flink**:确保你的环境中已经安装了 Apache Flink。 2. **安装…

三十一:HTTP多种重定向跳转方式的差异

在现代网站开发中,HTTP 重定向是一种常见的技术,用于将用户的请求从一个 URL 跳转到另一个 URL。重定向机制广泛应用于网站迁移、SEO 优化、以及内容管理系统中。不同的 HTTP 状态码代表不同的重定向方式,每种方式的行为和适用场景各有不同。本文将深入探讨 HTTP 重定向的几…

《数字图像处理基础》学习07-图像几何变换之最近邻插值法放大图像

目录 一,概念 二,题目及matlab实现 1,解题思路 2,matlab实现 1)matlab思路 2)完整代码 三,放大图像及matlab实现 一,概念 通过上一篇,我已经学习了使用最邻近插…

文献hub1:Sequence basis of transcription initiation in the human genome

tip1:文献阅读最重要的就是要抓住QA(要解决的问题)以及文章主线(逻辑) QA其实在abstract以及introduction中可以整理出来, 文章主线(逻辑)主要是看results各小标题每幅图小标题 一…

[ACTF2020 新生赛]BackupFile--详细解析

信息搜集 让我们寻找源文件,目录扫描: 找到了/index.php.bak文件,也就是index.php的备份文件。 后缀名是.bak的文件是备份文件,是文件格式的扩展名。 我们访问这个路径,就会直接下载该备份文件。 我们把.bak后缀删掉…

宠物领养平台开发:SpringBoot实战

第4章 系统设计 系统的设计一切都是为了用户的使用,虽然用户使用过程中可能只是面对着浏览器进行各种操作,但是不代表着系统对于用户在浏览器上的操作不进行处理,所以说,设计一个系统需要考虑到方方面面。 4.1 功能结构设计 图4.1…

状态模式S

状态模式(State Pattern)是行为设计模式的一种,它允许一个对象在其内部状态发生改变时改变其行为。这个对象被视为类型的有限状态机(Finite State Machine)。 在状态模式中,我们创建表示各种状态的对象和一…