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

Psycopg2如何处理含特殊字符的数据库密码?

解决PostgreSQL连接时含特殊字符密码的问题

最优方案:直接用关键字参数传递

不要手动拼接连接字符串,psycopg2的connect()方法支持直接传入关键字参数,它会自动处理所有特殊字符,完全规避转义问题:

import psycopg2

# 直接传入参数,无需处理密码里的特殊字符
connection = psycopg2.connect(
    user=user,
    password=pass,
    host=host,
    dbname=dbname,
    port=port
)

若必须用连接字符串:用make_dsn生成合法DSN

如果业务场景要求必须使用连接字符串形式,用psycopg2内置的extensions.make_dsn()方法生成符合规范的DSN,它会自动对特殊字符做正确转义:

import psycopg2
from psycopg2 import extensions

# 生成合规的DSN字符串
dsn = extensions.make_dsn(
    user=user,
    password=pass,
    host=host,
    dbname=dbname,
    port=port
)
connection = psycopg2.connect(dsn)

之前方法失效的原因

  • f-string拼接时,密码中的反斜杠会被Python当作转义字符解析(比如\56会被识别为八进制字符),导致实际传入的密码和原密码不一致。
  • 手动用urllib转义不符合PostgreSQL连接串的解析规则,比如@作为用户名与密码的分隔符,转义后无法被正确识别。
  • 双引号包裹密码仅适用于部分场景,若密码本身包含双引号等特殊字符,依然会出现解析错误,并非通用解决方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:27:42