我正在使用SQLalchemy作为Python项目,我希望有一个整洁的连接字符串来访问我的数据库。例如:

engine = create_engine('postgres://user:pass@host/database')

问题是我的密码包含一系列特殊字符,在我尝试连接时会被解释为分隔符。

我意识到我可以创建一个对象然后传递我的凭据:

drivername  = 'postgres',
username    = 'user', 
password    = 'pass', 
host        = 'host',
database    = 'database'

但如果可行,我宁愿使用连接字符串。

所以要清楚,是否可以对连接字符串或连接字符串的密码部分进行编码,以便正确解析?

有帮助吗?

解决方案

反斜杠不是URL组件字符串的有效转义字符。您需要对连接字符串的密码部分进行URL编码:

from urllib import quote_plus as urlquote
from sqlalchemy.engine import create_engine
engine = create_engine('postgres://user:%s@host/database' % urlquote('badpass'))

如果您查看SQLAlchemy中使用的类的实现来表示数据库连接URL(在 sqlalchemy / engine / url.py 中),您可以看到它们使用相同的方法来转义密码将URL实例转换为字符串时,解析代码使用补充的 urllib.unquote_plus 函数从连接字符串中提取密码。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top