字段对比清洗

news/2025/2/28 6:51:59/

在这里插入图片描述

import pandas as pd
import psycopg2
from psycopg2 import sql# 数据库连接配置
DB_CONFIG = {"host": "","user": "","password": "","dbname": "","port": ,
}def get_excel_fields(excel_file, sheet_name, column_name):"""从 Excel 读取字段列表"""df = pd.read_excel(excel_file, sheet_name=sheet_name)# 确保列名一致if column_name not in df.columns:raise ValueError(f"列 '{column_name}' 未在 Excel 文件中找到")# 移除空值,并转换为小写,避免大小写问题return set(df[column_name].dropna().astype(str).str.lower())def get_db_fields(cursor, table_name):"""获取数据库表的字段列表(转换为小写)"""query = sql.SQL("""SELECT column_name FROM information_schema.columns WHERE LOWER(table_name) = LOWER({})""").format(sql.Literal(table_name))cursor.execute(query)# 确保字段名全部转换为小写return set(row[0].lower() for row in cursor.fetchall())def drop_columns(cursor, table_name, columns_to_drop):"""删除数据库表中的指定字段"""for column in columns_to_drop:query = sql.SQL("ALTER TABLE {} DROP COLUMN {} CASCADE").format(sql.Identifier(table_name),sql.Identifier(column))print(f"执行 SQL: {query.as_string(cursor.connection)}")  # 打印 SQL 方便调试try:cursor.execute(query)print(f"✅ 删除成功: {column}")except psycopg2.Error as e:print(f"❌ 删除失败: {column}, 错误: {e}")def main():# 读取 Excel 表结构excel_file = "./test.xlsx"sheet_name = "数据结构"column_name = "编码"table_name = "test_name"try:excel_fields = get_excel_fields(excel_file, sheet_name, column_name)print(f"✅ Excel 字段列表: {excel_fields}")except Exception as e:print(f"❌ 读取 Excel 失败: {e}")returnconn, cursor = None, Nonetry:conn = psycopg2.connect(**DB_CONFIG)cursor = conn.cursor()db_fields = get_db_fields(cursor, table_name)print(f"✅ 数据库字段列表: {db_fields}")columns_to_drop = db_fields - excel_fields  # 计算需要删除的字段if columns_to_drop:print(f"⚠️ 需要删除的字段: {columns_to_drop}")drop_columns(cursor, table_name, columns_to_drop)conn.commit()print("✅ 未使用的字段已删除")else:print("✅ 没有未使用的字段需要删除")except psycopg2.Error as e:print(f"❌ 数据库错误: {e}")finally:if cursor:cursor.close()if conn:conn.close()if __name__ == "__main__":main()

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

相关文章

Spring Boot项目集成Redisson 原始依赖与 Spring Boot Starter 的流程

Redisson 是一个高性能的 Java Redis 客户端,提供了丰富的分布式工具集,如分布式锁、Map、Queue 等,帮助开发者简化 Redis 的操作。在集成 Redisson 到项目时,开发者通常有两种选择: 使用 Redisson 原始依赖。使用 Re…

STM32 微控制器库RCC_OscInitTypeDef结构参数介绍

目录 1. 结构体定义2. 结构体成员说明(1) OscillatorType(2) HSEState(3) LSEState(4) HSIState(5) HSICalibrationValue(6) LSIState(7) PLL 3. 使用步骤(1) 定义结构体(2) 配置结构体成员(3) 调用 HAL 初始化函数 4. 示例代码5. 注意事项(1) 时钟源的选择(2) 校准值(3) 时钟配…

RuntimeWarning: invalid value encountered in scalar power在进行标量的幂运算时遇到了无效值

year_profit ((profit / initial_cash) ** (1 / yy) - 1) * 100 RuntimeWarning: invalid value encountered in scalar power 这个警告表示在执行标量幂运算 ((profit / initial_cash) ** (1 / yy) - 1) * 100 时遇到了无效值。常见的引发原因及解决办法如下: ###…

WPF12-MVVM

目录 1. 什么是MVVM2. 实现简单MVVM2.1. Part 12.2. Part 2 1. 什么是MVVM MVVM 是 Model-View-ViewModel 的缩写,是一种用于构建用户界面的设计模式,是一种简化用户界面的事件驱动编程方式。 MVVM 的目标是实现用户界面和业务逻辑之间的彻底分离&…

DeepSeek中的MLA技术

大模型推理的两个阶段:prefill和decode prefill阶段处理整个输入序列,并生成第一个输出token,并初始化KV cachedecode阶段则逐个生成后续的tokens KV cache 无KV cache的推理过程:每次生成新token时,需要将整个历史序列…

专题一和为s的两个数字

1.题目 题目分析: 在给定的数组中,找到俩个数字,且这两个数字的和与给定的target相等就行,可能会有很多组,但只要返回一组就可以。 2.算法原理 方法一: 暴力枚举法,通过俩层循环,…

【QT】QLinearGradient 线性渐变类简单使用教程

目录 0.简介 1)qtDesigner中 2)实际执行 1.功能详述 3.举一反三的样式 0.简介 QLinearGradient 是 Qt 框架中的一个类,用于定义线性渐变效果(通过样式表设置)。它可以用来填充形状、背景或其他图形元素&#xff0…

零基础学习OpenGL(一)创建一个窗口

基于 ubuntu 系统,设置基础环境。 #!/usr/bin/env bashsudo apt-get update# 安装基础编译软件 sudo apt-get -y install gcc g cmake git# 安装编译 glfw 依赖的软件 sudo apt-get -y install libwayland-dev libx11-dev libxcursor-dev libxi-dev libxinerama-de…