0

Microsoft SQL サーバー インスタンスにクエリを実行するように odbc をセットアップしました。私の 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,)
4

1 に答える 1