使用Python连接DB2数据库出现unhashable type: 'list'错误求助
错误原因
- 最可能的触发点是代码中
config.get()的第一个参数conn_type为列表类型:configparser的section查询基于字典实现,字典键必须是可哈希类型,列表属于不可哈希类型,传入后直接触发unhashable type: 'list'报错。 - 次要可能:配置文件中同一个section下存在重复的配置键,导致
config.get()返回列表类型的配置值,后续传入连接逻辑时触发报错。
解决方案
- 第一步:确认
conn_type变量类型为字符串,匹配配置文件中实际存在的section名称,可在调用config.get()前添加调试代码确认:
print(type(conn_type), conn_type) # 示例正确赋值:conn_type = "db2_prod" 对应配置文件中的[db2_prod] section
- 第二步:校验配置文件合法性,确认同一个section下没有重复的配置项(如重复的
server_name、user等键),同时打印所有读取到的配置值确认类型为字符串:
print(config.sections()) # 确认读取到目标section print(type(server_name), server_name) print(type(database), database) print(type(username), username) print(type(password), password)
- 第三步:优化连接调用方式,避免字符串拼接出错,可改用关键字参数调用
connect方法,逻辑更清晰:
conn = ibm_db_dbi.connect( database=database, hostname=server_name, uid=username, pwd=password )
如果要保留DSN字符串的写法,可改用更安全的格式化方式:
dsn = "Server={};Database={};UID={};PWD={};".format(server_name, database, username, password) conn = ibm_db_dbi.connect(dsn)
内容的提问来源于stack exchange,提问作者sandy
相关产品推荐
相关产品推荐

