簡體   English   中英

Python 從 SQLite3 DB 返回意外值

[英]Python returning unexpected values from SQLite3 DB

我有一個名為 DEVICES 的 SQLite3 表,其中包含來自我的家庭網絡的 ip 地址列表。 我想對那些 ip 地址運行 arp 掃描。 注意,這是我的 DEVICES 表中導出到 csv 文件的數據:

ipAddr,macAddr,Description,OS,Notes

192.168.0.1,,,,

192.168.0.134,,,,

現在,當我運行以下代碼時,我覺得從 SQLite3 返回的數據不正確。 注意 PRINT stmts:

    cursorObj.execute("SELECT ipAddr FROM Devices")
    rows = cursorObj.fetchall()
    print("rows="+str(rows))
    for ipAddr in rows:
        print("working on ipAddr="+str(ipAddr))
        macAddr = os.popen('sudo arp-scan '+str(ipAddr)+' | grep MAC: | cut -f 6- -d \' \' | cut -c1-17').read()
        print("MAC: "+macAddr+" found for IP: "+str(ipAddr))

我的日志:

rows=[('192.168.0.1',), ('192.168.0.134',)]

working on ipAddr=**('**192.168.0.1**',)**

/bin/sh: 1: Syntax error: "(" unexpected
MAC:  found for IP: **('192.168.0.1',)**

為什么我的“ipAddr=('192.168.0.1',)”而不是簡單的“ipAddr=192.168.0.1”,就像它在數據庫中一樣?

謝謝@Shawn。 鑒於此(如果有人想知道),我將代碼修改如下,現在似乎可以正常工作:\n\n

for row in rows: #LOOP THROUGH LIST
    for ipAddr in row: #LOOP THROUGH TUPLE
        print("working on ipAddr="+str(ipAddr))

您可以在第一個for循環中使用解包,而不是遍歷從cursorObj.fetchall返回的每個單獨的元組:

for ipAddr, *_ in rows:
   pass

*_指向元組中的任何其他值,在ipAddr之后,在_中,一個一次性變量

由於您的數據庫有多個列,因此解包可以幫助您避免迭代元組中的任何非 ip 值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM