天天看點

對從mysql讀取的資料進行合規性檢測

假設編寫一個登入交換機的腳本,登入交換機時,交換要求輸入賬号、密碼及enable(super)密碼,而用于登入交換機所需要的資訊至少需包括:交換機IP、登入賬号、密碼及enable(super)密碼,這些資訊均存在mysql資料庫中。腳本需從資料庫中讀取該資訊。是以讀取的資料交換機IP、登入賬号、密碼及enable(super)密碼均不能為空。如果為空,則登入交換機肯定失敗,無需再執行後面的登入代碼了。是以有必要對從資料庫中讀取的資料做合規性檢測。

現資料庫中的資訊如下:

mysql> select * from TSwitch;
+--------------+----------+----------+----------------+
| IP           | Username | Password | EnablePassword |
+--------------+----------+----------+----------------+
| 192.168.0.80 | admin    | cisco    | cisco          |
| 192.168.0.70 | admin    | H3c      | NULL           |
| 192.168.0.60 | NULL     | huawei   | huawei         |
+--------------+----------+----------+----------------+
           

從上标可看出,隻有第一行的資料是合規的。第二資料的EnablePassword值為空、第三行資料的Username為空,是以資料不合規,如何進行檢測。

[[email protected] python]# cat chkparavalid.py 
#!/usr/bin/env python
#encoding=utf-8
import MySQLdb

def argisvalid(mytuple):
    "return 0 if the mylist including Null"
    myres=1
    for m in mytuple:
        if m==None:
            myres=0
            continue
    return myres

def main():
    conn= MySQLdb.connect(
        host='localhost',
        port = 3306,
        user='root',
        passwd='123456',
        db ='mydb',
        )
    cur = conn.cursor()
    sqlstr1=cur.execute("select IP,Username,Password,EnablePassword from TSwitch");
    sqlset1=cur.fetchmany(sqlstr1)
    for sqlres1 in sqlset1:
        print argisvalid(sqlres1)
    cur.close()
    conn.commit()
    conn.close()

if __name__=='__main__':
    main()
           

上面代碼執行的結果是,如果資料不合規,則輸出0,合規則輸出1.

[[email protected] python]# python chkparavalid.py 
1
0
0
           

該腳本的關鍵函數為argisvalid,作用為參數(list或tuple)中如果含None值則傳回0,否則傳回1。