我已设置 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,)