【问题标题】:SqlAlchemy connection string [duplicate]SqlAlchemy 连接字符串 [重复]
【发布时间】:2013-07-21 03:45:22
【问题描述】:

我遇到了非常奇怪的问题 - 我使用 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?

【问题讨论】:

  • SQLALCHEMY_DATABASE_URI 中包含的结果字符串是什么?
  • @Simonatmso.net 不太确定是否理解您的问题。 MySQL (SQLALCHEMY_DATABASE_URI) 的连接字符串的语法是已知的,并在 sqlalchemy 文档中进行了描述。我只是想拆分信息。所以,代替第一个花括号用户将被替换和密码 - 而不是第二个。
  • 无论如何,更新代码块。
  • 这就是我要问的 - 使用更安全的密码,生成的字符串是否按预期结束? (print SQLALCHEMY_DATABASE_URI 输出什么?)。如果按预期输出,那么 SQLAlchemy 正在做的事情一定会导致密码中的一个字符出现问题(再次假设,我会查看 &+
  • mysql://test_user:8yq+aB&k$V@localhost:3306/test_db - 我查过了。我还怀疑问题是&符号或其他非字母数字用法。但希望有人遇到同样的问题。真难过。

标签: python mysql sqlalchemy


【解决方案1】:

这个问题/答案可能是这个问题的副本,所以值得先检查一下Writing a connection string when password contains special characters

根据SQLAlchemy documentation

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

根据RFC-1738 definition

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 编码,以确保正确转义任何此类字符。根据How to urlencode a querystring in Python?,这可以使用urlencode()在python中完成

【讨论】:

    猜你喜欢
    • 2013-01-01
    • 2015-08-23
    • 2020-12-30
    • 2015-07-31
    • 1970-01-01
    • 2013-09-14
    • 2013-11-30
    • 2013-09-26
    • 2012-12-24
    相关资源
    最近更新 更多