pyodbc出错:'pyodbc.Cursor'对象没有属性'commit'

时间:2015-11-06 18:05:58

标签: python pyodbc freetds

我希望通过SQL SERVERpyodbc从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”

2 个答案:

答案 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"

所以看起来你有点拿起正确的数据,但它并没有以有意义的方式传达给你。

不知道为什么,只是分享观察......