Python使用psycopg2连接PostgreSQL报TypeError错误如何解决
问题原因及解决方案
你的报错是由两处代码错误共同导致的,直接对照修改即可:
1. 配置读取逻辑变量引用错误
你在config.py的循环遍历配置项时,错误引用了整个配置列表,而非当前遍历的单个配置项:
原错误代码:
for config_param in config_params: # get options key and value key = config_params[0] value = config_params[1]
这里config_params是所有配置项组成的列表,每次取config_params[0]得到的是第一个配置项的元组('host', 'localhost'),导致字典的键变成了元组而非字符串,自然会触发connect() keywords must be strings报错。
修复后代码:
for config_param in config_params: # 取当前遍历的单个配置项的键和值 key = config_param[0] value = config_param[1]
2. 配置文件路径拼接错误
你在config.py中定义了get_project_root()获取项目根路径,但拼接配置文件路径时没有使用,直接写了相对路径'config/' + config_db,当运行入口main.py时,工作目录和预期不一致,会导致程序找不到database.ini文件,config函数直接返回None,触发connect() argument after ** must be a mapping, not NoneType报错。
修复后路径拼接逻辑:
def config(config_db): section = 'postgresql' # 用项目根路径拼接配置文件路径,避免相对路径的工作目录问题 config_file_path = get_project_root() / 'config' / config_db
验证修复
修改完以上两处后重新运行main.py,即可正常读取配置连接数据库返回查询结果。
内容的提问来源于stack exchange,提问作者fritzp
相关产品推荐
相关产品推荐

