读取CSV库表信息,通过对应JSON配置连接数据库的代码参数问题
解决方案
步骤1:导入JSON模块并读取配置文件
需要添加json模块解析数据库配置文件,针对CSV中的每个数据库,动态读取对应的JSON配置文件。
步骤2:映射JSON配置到psycopg2连接参数
JSON配置的键名和psycopg2.connect所需参数名不完全匹配,需做对应映射:
serverName→hostdatabaseName→dbnameport→port(需转为整数,psycopg2要求port为int类型)userID→userpassword→password
修正后的完整代码
import psycopg2 from psycopg2 import sql import csv import json with open('file.csv') as csv_file: r = csv.DictReader(csv_file) for row in r: db_name = row['database'] table_name = row['tablename'] print(db_name, table_name) # 读取对应数据库的JSON配置文件 config_path = f"{db_name}.json" with open(config_path, 'r') as config_file: db_config = json.load(config_file) # 映射配置参数到psycopg2所需格式 conn_params = { 'dbname': db_config['databaseName'], 'host': db_config['serverName'], 'port': int(db_config['port']), 'user': db_config['userID'], 'password': db_config['password'] } # 连接数据库并执行删除操作 try: con = psycopg2.connect(**conn_params) cur = con.cursor() # 修正DELETE语句:SQL中DELETE不需要* cur.execute(sql.SQL("DELETE FROM {}").format(sql.Identifier(table_name))) con.commit() print(f"成功删除{db_name}.{table_name}的数据") except Exception as e: con.rollback() print(f"处理{db_name}.{table_name}时出错: {str(e)}") finally: # 确保关闭游标和连接 if cur: cur.close() if con: con.close()
额外说明
- 多DBMS兼容:如果配置包含非PostgreSQL的数据库(如示例中的sybase),
psycopg2无法连接,需更换对应驱动(如sybase用pysybase)并调整参数映射逻辑。 - 错误处理:通过try-except-finally块处理连接或执行错误,确保资源释放和事务的正确提交/回滚。
- SQL语法修正:原代码中
delete * from是错误语法,正确写法为DELETE FROM table_name。
内容的提问来源于stack exchange,提问作者DIVYA
相关产品推荐
相关产品推荐

