11

我遇到了非常奇怪的问题 - 我使用 sqlalchemy 的解决方案无法连接到数据库。这取决于我使用的密码。例如,以下记录运行良好:

PWD='123123123'
USR='test_user';
SQLALCHEMY_DATABASE_URI = 'mysql://{}:{}@localhost:3306/test_db'.format(USR, PWD)

#final result is 'mysql://test_user:123123123@localhost:3306/test_db'.format(USR, PWD)

但是当我试图对密码输入一些严重的东西(比如' 8yq+aB&k$V')时,连接失败了。如何以某种方式“转义”或编码密码,以便 sqlalchemy 成功地将其传递给 mysql?

4

1 回答 1

16

这个问题/答案可能是这个问题的副本,所以值得先检查一下当密码包含特殊字符时写一个连接字符串

根据SQLAlchemy 文档

the string format of the URL is an RFC-1738-style string.

根据RFC-1738 定义

If the character corresponding to an octet is
reserved in a scheme, the octet must be encoded.  The characters ";",
"/", "?", ":", "@", "=" and "&" are the characters which may be
 reserved for special meaning within a scheme.

为此,我假设您的密码(和用户名)需要进行 URL 编码,以确保正确转义任何此类字符。根据如何在 Python 中对查询字符串进行 urlencode?这可以在 python 中使用urlencode()

于 2013-07-22T12:24:21.607 回答