问题描述
我有一个web2py API应用程序,最近从python 2.7.x升级到了python 3.6.3。 API函数查询Microsoft sql数据库。
当我使用选项'as_dict = True'执行sql语句时,游标对象使用其description属性从db表中获取列名以进行一些检查,但是由于某些原因,从数据库已“损坏”。
例如:
数据库表:
webDataTbl:
_key | _value
WEB_NAME NAME
WEB_VER '1.2.3'
SP:
SELECT * FROM webDataTbl WHERE _key LIKE 'WEB_%'
web2py中的函数:
sql_cmd = ("EXEC getWebData")
result = db.executesql(sql_cmd,as_dict=True)
return {"result": result}
executesql方法执行以下代码(当as_dict = True时):
columns = adapter.cursor.description
fields = colnames or [f[0] for f in columns]
if len(fields) != len(set(fields))
raise RuntimeError
如source code所述,cursor.description返回一个7项元组的列表,当第一个字段是列名(或别名)时,从数据库返回的每一列一个元组。 但是,当我打印元组时,我得到了:
[(b'c',<class 'str'>,64,False),(b'c',256,True)]
我认为问题可能出在数据库编码或其他方面,但是它并没有帮助更改sql连接中的编码。 我没有更改代码,数据库数据,SP等中的任何内容。我唯一要做的就是升级版本。 请注意,获取的数据可以。当我不使用'as_dict'选项并且光标不使用description属性时,一切正常。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)