pymysql 操做 , sql注入

1,安裝:

pip3 install pymysql

import pymysql

注意:
    a.文件名不能寫本身自己
    b.connect ----> conn ----> cursor
    c.執行sql語句  ---> execute(sql)
    d.取數據:
        fetchone()
        fetchall()
        fetchamany(size)
    e.增長刪除:
        conn.commit()

2,連接:

import  pymysql

# 鏈接mysql服務器
conn = pymysql.connect(host='localhost', user='root', password='123',database='db2', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

sql = "select * from student where id > %s " % (12,)

cursor.execute(sql)

# res = cursor.fetchone()
res = cursor.fetchmany(10)
# res = cursor.fetchall()  ### 列表裏面套字典
print(res)

cursor.close()
conn.close()

3,操做:

import  pymysql

# 鏈接mysql服務器

conn = pymysql.connect(host='localhost', user='root', password='123',database='db1', charset='utf8')
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

sql = "delete from t7 where id=3"
cursor.execute(sql)

###  刪除和更新的時候, 須要事物提交
conn.commit()


# res = cursor.fetchone()
# res = cursor.fetchmany(10)
# res = cursor.fetchall()  ### 列表裏面套字典
# print(res)

cursor.close()
conn.close()

 

注意:
            
    a. conn, cursor 用完了須要關閉資源鏈接
            
    b. 查詢的時候, fetchone, fetchmany, fetchall,  默認返回的是元組, 須要返回字典的話: cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
            
    c. 刪除和更新的時候, 須要在execute以後, 添加 conn.commit()

4,sql注入

a. 登陸驗證
    
    寫sql語句的時候, %傳值的時候, 須要加引號:
        sql = "select * from t4 where name = '%s' and pwd = '%s'" % (username, pwd)
    
    上面的sql語句帶來的風險是:
    
        例一:
            username = zekai' #
            
            select * from t4 where name = 'zekai' #' and pwd = ''
        
        例二:
            username = dbsahvbdsha' or 1=1 #
            
            select * from t4 where name = 'dbsahvbdsha' or 1=1 
上面出現的問題,咱們稱之爲 SQL注入 (
**********************************) 出現問題的根源是: 由於太過於相信用戶的輸入, 致使咱們在接受用戶輸入的參數的時候, 並無對他進行轉義 解決SQL注入: 1. 本身手工對用戶輸入的值進行轉義 2. 使用execute()自動進行過濾 sql = "select * from t4 where name = %s and pwd = %s" cursor.execute(sql,(username, pwd)) #$## 插入一條 cursor.execute(sql, ('lxxx', '1234'))
### 插入多條 data = [ ('aaaaa', 'aaa'), ('bbbb', 'bbb'), ('ffff', '666'), ('rrrr', '888'), ] cursor.executemany(sql, data) try: cursor.execute(sql, ('lxxx', '1234')) ### 刪除和更新的時候, 須要事物提交 conn.commit() except Exception as e: conn.rollback() cursor.lastrowid : 最後一行的行數
相關文章
相關標籤/搜索