SQLObject抛出:未知数据库'dbname?charset = utf8'

时间:2015-12-06 03:08:54

标签: python mysql sqlobject

我有第三方Python脚本,看起来它必须通过SQLObject包连接到MySQL数据库。

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

  

sqlobject.dberrors.OperationalError:未知数据库   'DBNAME?字符集= UTF8'

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

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

调用this function

当注释ar['charset'] = 'utf8'时它连接正常,因此不提供查询字符串。

我在Windows上有这个问题,

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

到底发生了什么,以及它应该如何修复?问题出在依赖关系或脚本本身吗?

2 个答案:

答案 0 :(得分:2)

我做了一些研究,发现最新版本的SQLObject使用the following code从URI中提取连接参数。不幸的是,urlparse函数的工作方式是path,用作进一步用查询字符串解析的数据库名称。

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

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

这可能有所帮助,但是有必要提出一个拉取请求来修复从URI中提取数据库名称。

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

答案 1 :(得分:1)

逗号,不是问号:

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

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