使用unix odbc和pypyodbc返回奇怪的结果

时间:2014-07-31 00:05:56

标签: python sql sql-server left-join pypyodbc

我有odbc设置来查询Microsoft SQL服务器实例。我的SQL语句从isql命令行运行良好;但是,当我在pypyodbc中使用相同的查询时,结果不正确。我的查询的独特之处在于我有一个嵌套的左连接。

数据集基本上是一些用户登录信息;所以我有一个设备表(硬件),一个节点表(软件)和一个用户表(谁登录到节点)。

我的嵌套左连接的作用是为已登录到设备/节点的每个用户创建一个新结果,当然,如果没有人登录,则不返回任何用户信息。正如我所提到的,SQL语句适用于命令行;只是不在我的python脚本中 - 从python脚本中它将用户从命令行附加到其中。有人可以帮我解决一些问题吗?

我的SQL查询:

SELECT

  deviceserialid AS serial,
  devicemanufacturer AS vendor,
  devicemodel AS model,

  nodecn AS nodename,
  nodeoperatingsystem AS os_value,
  nodeoperatingsystemversion AS os_version,
  nodelastlogontimestamp AS node_last_login,

  nodedeviceuseruserid AS user_id,

  ip.ipaddress AS ip_address,
  ip.ipmacaddress AS mac_address,

  [user].username AS user_name,
  [user].useremplid AS user_id

FROM
  nodedevice
  LEFT JOIN nodedeviceuser ON nodedeviceuser.nodedeviceusernodedeviceid=nodedevice.nodeid
    LEFT JOIN [user] ON [user].userid=nodedeviceuser.nodedeviceuseruserid,
  device, node 
  LEFT JOIN ip ON ip.ipnodeid=node.nodeid

WHERE
  nodedevice.nodeid=node.nodeid
  AND nodedevice.deviceid=device.deviceid

ORDER BY nodename, mac_address

我的Python代码:

def rows_to_dict_list(cursor):
    columns = [i[0].lower() for i in cursor.description]
    for row in cursor:
        try:
            d = dict(zip(columns, row))
        except:
            yield None

cursor.execute( <SQL_STATEMENT> )
for this in rows_to_dict_list(cursor):
    print "%s" % (this,)

1 个答案:

答案 0 :(得分:0)

好像pypyodbc中有一个错误;我用pyodbc交换了模块,它工作正常。