2

我有第三方的Python脚本,看来得通过SQLObject包的方式连接MySQL数据库。

考虑到我提供了正确的 DSN,脚本会抛出

sqlobject.dberrors.OperationalError: 未知数据库 'dbname?charset=utf8'

我已经将问题追溯到这段代码

ar['charset'] = 'utf8'
conn = connectionForURI(uri, **ar)

它调用了这个函数

并且在ar['charset'] = 'utf8'评论时连接良好,因此没有提供查询字符串。

我在 Windows 上有这个问题,

  • MySQL 5.5.25
  • Python 2.7.2
  • MySQL-python 1.2.5
  • SQLObject 3.0.0a1dev-20150327

那里到底发生了什么,应该如何解决?问题出在依赖项还是脚本本身?

4

2 回答 2

2

我做了一些研究,发现最新版本的 SQLObject 使用以下代码从 URI 中提取连接参数。不幸的是,urlparse函数以这种方式工作,因此path它被用作数据库名称,并通过查询字符串进一步解析。

作为此问题的解决方法,我可以建议将 DB 编码参数显式传递给连接对象,如下所示:

conn = connectionForURI(uri)
conn.dbEncoding = 'utf-8'

它可能会有所帮助,但值得提出一个拉取请求来修复从 URI 中提取的数据库名称。

UPD:像 2.x 这样的旧版本使用不同的代码来解析连接 URL,效果很好。

于 2015-12-08T14:50:34.890 回答
1

逗号,不是问号:

db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS,
      db=DB_NAME, charset="utf8", use_unicode=True)

如果您无法通过第 3 方软件,请放弃它。

于 2015-12-14T20:16:01.133 回答