You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于CSV数据库列,用Python实现分服务器数据库操作的问题

基于数据库名执行跨服务器表删除操作的Python实现

核心需求

读取包含databasename和tablename列的file.csv,根据数据库名连接对应服务器,对指定表执行删除操作:

  • 当databasename为db1时,连接server a
  • 当databasename为db2时,连接server b

方法一:使用Pandas处理CSV

Pandas读取CSV后,通过iterrows()遍历每一行数据,结合数据库驱动完成操作:

import pandas as pd
# 根据你的数据库类型替换驱动,比如MySQL用pymysql,Oracle用cx_Oracle
import pyodbc

# 读取CSV文件,确保列名与CSV中一致
df = pd.read_csv("file.csv")

# 预定义不同数据库的连接字符串,替换为你的实际配置
conn_config = {
    "db1": "DRIVER={ODBC Driver 17 for SQL Server};SERVER=server_a;DATABASE=db1;UID=你的用户名;PWD=你的密码",
    "db2": "DRIVER={ODBC Driver 17 for SQL Server};SERVER=server_b;DATABASE=db2;UID=你的用户名;PWD=你的密码"
}

# 遍历每一行数据
for _, row in df.iterrows():
    db_name = row["databasename"]
    table_name = row["tablename"]
    
    # 跳过未配置的数据库
    if db_name not in conn_config:
        print(f"跳过未知数据库:{db_name}")
        continue
    
    # 执行删除操作
    try:
        # 建立连接
        conn = pyodbc.connect(conn_config[db_name])
        cursor = conn.cursor()
        
        # 构造删除SQL,用方括号包裹表名避免特殊字符冲突
        delete_sql = f"DELETE FROM [{table_name}]"
        cursor.execute(delete_sql)
        conn.commit()
        print(f"已成功删除 {db_name}.{table_name} 的数据")
        
    except Exception as err:
        print(f"处理 {db_name}.{table_name} 失败:{str(err)}")
        # 出错时回滚事务
        if conn:
            conn.rollback()
    finally:
        # 确保连接关闭
        if conn:
            conn.close()

方法二:使用标准库csv模块

如果不想依赖Pandas,直接用Python内置的csv模块读取数据:

import csv
import pyodbc

# 数据库连接配置
conn_config = {
    "db1": "DRIVER={ODBC Driver 17 for SQL Server};SERVER=server_a;DATABASE=db1;UID=你的用户名;PWD=你的密码",
    "db2": "DRIVER={ODBC Driver 17 for SQL Server};SERVER=server_b;DATABASE=db2;UID=你的用户名;PWD=你的密码"
}

# 读取CSV文件
with open('file.csv', 'r', newline='', encoding='utf-8') as csv_file:
    # 用DictReader按列名读取数据
    reader = csv.DictReader(csv_file)
    
    for row in reader:
        db_name = row["databasename"]
        table_name = row["tablename"]
        
        if db_name not in conn_config:
            print(f"跳过未知数据库:{db_name}")
            continue
        
        try:
            conn = pyodbc.connect(conn_config[db_name])
            cursor = conn.cursor()
            
            delete_sql = f"DELETE FROM [{table_name}]"
            cursor.execute(delete_sql)
            conn.commit()
            print(f"已成功删除 {db_name}.{table_name} 的数据")
            
        except Exception as err:
            print(f"处理 {db_name}.{table_name} 失败:{str(err)}")
            if conn:
                conn.rollback()
        finally:
            if conn:
                conn.close()

关键注意事项

  • 数据库驱动适配:示例用的是SQL Server的ODBC驱动,若使用其他数据库,需替换对应的驱动库(如MySQL用pymysql,PostgreSQL用psycopg2)
  • SQL注入防护:如果CSV中的表名不可信,需先验证表名合法性,避免注入风险
  • 事务安全:执行删除后必须commit,出错时要rollback,避免数据不一致
  • 列名匹配:确保CSV中的列名与代码中databasename、tablename完全一致(区分大小写)

内容的提问来源于stack exchange,提问作者DIVYA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 04:20:21