我希望通过SQL SERVER
和pyodbc
从Python连接到freetds
数据库。
我的联系还可以。
我的代码:
class GetSystems(Resource):
def get(self):
try:
cur = Connection.conn.cursor()
cur.execute(
"SELECT id,systemName,SystemDescription FROM MEFSystem")
rows = cur.fetchall()
objects_list = []
for row in rows:
d = collections.OrderedDict()
d['id'] = row[0]
d['systemName'] = row[1]
d['systemDescription'] = row[2]
objects_list.append(d)
logger.info(objects_list)
cur.commit()
cur.close()
logger.info(objects_list)
except Exception as inst:
cur.rollback()
cur.close()
print type(inst)
print inst.args
print inst
logger.error(type(inst))
logger.error(inst.args)
logger.error(inst)
return objects_list
这会在cur.commit()
:pyodbc.Cursor object has no attribute 'commit'
中生成错误并返回未知数据:
[
{
"id": 2,
"systemDescription": "",
"systemName": "\uda00\udc53\ud940\udc41"
},
{
"id": 3,
"systemDescription": "",
"systemName": "\uda00\udc53\ud800\udc47"
},
{
"id": 4,
"systemDescription": "",
"systemName": "\ud900\udc52\ud8c0\udc4e\ud880\udc41"
}
]
数据应为:
[
{
"id": 2,
"systemDescription": "",
"systemName": "SIAF"
},
{
"id": 3,
"systemDescription": "",
"systemName": "SIGA"
},
{
"id": 4,
"systemDescription": "",
"systemName": "RENTAS"
}
]
更新
我评论了提交,但返回数据库中未知的数据。 look => “systemName”:“\ uda00 \ udc53 \ ud940 \ udc41”,应为“systemName”:“SIGA”
答案 0 :(得分:3)
该问题的解决方案是pyodbc的版本,从此link下载pyodbc并安装。
感谢!!!
答案 1 :(得分:0)
不确定如何获得这些奇怪的价值,这可能是编码问题吗? 查看您的数据(以粗体显示数据):
\ uda00 \ udc 53 \ ud940 \ udc 41 - 应该是SIAF,粗体数据是ascii用于" S"和" A"
\ uda00 \ udc 53 \ ud800 \ udc 47 - 应为SIGA,粗体数据为ascii,用于" S"," G"
\ ud900 \ udc 52 \ ud8c0 \ udc 4e \ ud880 \ udc 41 - RENTAS,粗体是" R&# 34;," N"," A"
所以看起来你有点拿起正确的数据,但它并没有以有意义的方式传达给你。
不知道为什么,只是分享观察......