SQLObject 抛出:未知数据库 'dbname?charset=utf8'
SQLObject throws: Unknown database 'dbname?charset=utf8'
我有第三方 Python 脚本,看起来它必须通过 SQLObject
包连接到 MySQL 数据库。
考虑到我提供了正确的 DSN,脚本抛出
sqlobject.dberrors.OperationalError: Unknown database
'dbname?charset=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
那里到底发生了什么,应该如何解决?问题出在依赖还是脚本本身?
我做了一些研究,发现最近版本的 SQLObject 使用 the following code 从 URI 中提取连接参数。不幸的是,urlparse
函数以这种方式工作,因此用作数据库名称的 path
用查询字符串进一步解析。
作为此问题的解决方法,我建议将 DB 编码参数显式传递给连接对象,如下所示:
conn = connectionForURI(uri)
conn.dbEncoding = 'utf-8'
这可能会有所帮助,但值得发出拉取请求来修复从 URI 中提取数据库名称的问题。
UPD:像 2.x 这样的旧版本使用不同的代码来解析连接 URL,效果很好。
逗号,不是问号:
db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS,
db=DB_NAME, charset="utf8", use_unicode=True)
如果你无法通过第 3 方软件,请放弃它。
我有第三方 Python 脚本,看起来它必须通过 SQLObject
包连接到 MySQL 数据库。
考虑到我提供了正确的 DSN,脚本抛出
sqlobject.dberrors.OperationalError: Unknown database 'dbname?charset=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
那里到底发生了什么,应该如何解决?问题出在依赖还是脚本本身?
我做了一些研究,发现最近版本的 SQLObject 使用 the following code 从 URI 中提取连接参数。不幸的是,urlparse
函数以这种方式工作,因此用作数据库名称的 path
用查询字符串进一步解析。
作为此问题的解决方法,我建议将 DB 编码参数显式传递给连接对象,如下所示:
conn = connectionForURI(uri)
conn.dbEncoding = 'utf-8'
这可能会有所帮助,但值得发出拉取请求来修复从 URI 中提取数据库名称的问题。
UPD:像 2.x 这样的旧版本使用不同的代码来解析连接 URL,效果很好。
逗号,不是问号:
db = MySQLdb.connect(host=DB_HOST, user=DB_USER, passwd=DB_PASS,
db=DB_NAME, charset="utf8", use_unicode=True)
如果你无法通过第 3 方软件,请放弃它。