視圖函數中進行sql查詢,防止sql注入

 

視圖函數中進行sql查詢

 

import pymysql
# 建立鏈接  use_unicode=true指定字符的編碼、解碼格式,進行自動編碼解碼,mysql數據庫的編碼格式爲gbk,而項目數據庫爲utf-8
# 使用與django和falsk框架
db=pymysql.connect(host='127.0.0.1',user='root',password='',port=3306,database='t1',charset='utf8',use_unicode=True)

def func():
    sql='select * from class'
    try:
        # 得到course對象
        corsor=db.cursor()
        # 執行sql語句
        corsor.execute(sql)
        # 得到查詢結果
        results=corsor.fetchall()
        l=list(results)
        print(l)
        return len(l)

    except Exception as e:
        return str(e)

if __name__ == '__main__':
    print(func())

  

防止sql注入

from pymysql import *
def main():
    
    find_name = input("請輸入物品名稱:")
    
    # 建立Connection鏈接
    conn = connect(host='localhost',port=3306,user='root',password='',database='t1',charset='utf8')
    # 得到Cursor對象
    cs1 = conn.cursor() 
     
    # 不使用防禦措施 輸入  " or 1=1 or " 那麼就返回數據庫數據,形成數據庫泄露
    # count=cs1.execute("select * from course where cname='%s'" % find_name)
    
    # 構造查詢參數 -- 方式sql注入   execute模塊會自動爲要查詢的匹配引號和雙引號
    params=[find_name]
    count=cs1.execute('select * from course where cname=%s',params)
    # 注意:
    # 若是要是有多個參數,須要進行參數化
    # 那麼params = [數值1, 數值2....],此時sql語句中有多個%s便可

    print(count)
    result=cs1.fetchall()
    print(result)

    # 關閉corsor對象
    cs1.close()
    # 關閉connection對象
    conn.close()

if __name__ == '__main__':
    main()

  輸入要查的字段會顯示響應數據內容。python

相關文章
相關標籤/搜索