import pymysql # 導入 pymysql 模塊 # 鏈接數據庫 conn = pymysql.connect(host = 'IP', user = '用戶名', password = '密碼', database = '數據庫名稱', charset = 'utf8') # 遊標 cursor = conn.cursor() # 執行完畢後返回的結果默認以元祖的形式展現 # cursor = conn.cursor(cursor = pymysql.cursors.DictCursor) # 執行完畢後返回的結果以字典的形式展現,推薦使用 # 執行 SQL 指令 sql = 'SQL指令' # 若是須要傳入參數,在指令裏面使用佔位符,在下面的 cursor.execute(sql) 函數中,將參數按順序寫在 sql 後面 res = cursor.execute(sql,(參數...)) # 執行 SQL指令,返回查詢成功的記錄 conn.commit() # 若是對數據庫裏的數據作改動,必須加這一行 # 斷開數據庫的鏈接 cursor.close() conn.close()
import pymysql # 導入 pymysql 模塊 # 鏈接數據庫 conn = pymysql.connect(host = 'IP', user = '用戶名', password = '密碼', database = '數據庫名稱', charset = 'utf8') # 遊標 # cursor = conn.cursor() # 執行完畢後返回的結果默認以元祖的形式展現 cursor = conn.cursor(cursor = pymysql.cursors.DictCursor) # 執行完畢後返回的結果以字典的形式展現 ''' 1.增長一條數據 # 執行 SQL 指令 sql = 'insert into user (name,password) values (%s, %s)' # 添加數據的 SQL指令 res = cursor.execute(sql,('tom','123')) # 將 SQL指令和數據發給 mysql,執行後拿到結果 conn.commit() # 提交 2.增長多條數據 # 準備要添加的數據 data = [ ('name1','password1'), ('name1','password1'), ('name1','password1') ] sql = 'insert into user (name,password) values (%s, %s)' # 添加數據的 SQL指令 res = executemany(sql, data) # 將 SQL指令和數據發給 mysql,執行後拿到結果 conn.commit() ''' # 斷開數據庫的鏈接 cursor.close() conn.close()
import pymysql # 導入 pymysql 模塊 # 鏈接數據庫 conn = pymysql.connect(host = 'IP', user = '用戶名', password = '密碼', database = '數據庫名稱', charset = 'utf8') # 遊標 # cursor = conn.cursor() # 執行完畢後返回的結果默認以元祖的形式展現 cursor = conn.cursor(cursor = pymysql.cursors.DictCursor) # 執行完畢後返回的結果以字典的形式展現 # 執行 SQL 指令 sql = 'update user set name=%s where id=%s' # 修改數據的 SQL指令 res = cursor.execute(sql,('jack',2)) # 將 SQL指令和數據發給 mysql,執行後拿到結果 conn.commit() # 若是對數據庫裏的數據作改動,必須加這一行 # 斷開數據庫的鏈接 cursor.close() conn.close()
import pymysql # 導入 pymysql 模塊 # 鏈接數據庫 conn = pymysql.connect(host = 'IP', user = '用戶名', password = '密碼', database = '數據庫名稱', charset = 'utf8') # 遊標 # cursor = conn.cursor() # 執行完畢後返回的結果默認以元祖的形式展現 cursor = conn.cursor(cursor = pymysql.cursors.DictCursor) # 執行完畢後返回的結果以字典的形式展現 # 執行 SQL 指令 sql = 'delete from t3 where id=%s' # 刪除數據的 SQL指令 res = cursor.execute(sql,(1,)) # 將 SQL指令和數據發給 mysql,執行後拿到結果 conn.commit() # 若是對數據庫裏的數據作改動,必須加這一行 # 斷開數據庫的鏈接 cursor.close() conn.close()
import pymysql # 導入 pymysql 模塊 # 鏈接數據庫 conn = pymysql.connect(host = 'IP', user = '用戶名', password = '密碼', database = '數據庫名稱', charset = 'utf8') # 遊標 # cursor = conn.cursor() # 執行完畢後返回的結果默認以元祖的形式展現 cursor = conn.cursor(cursor = pymysql.cursors.DictCursor) # 執行完畢後返回的結果以字典的形式展現 # 執行 SQL 指令 sql = 'delete from t3 where id=%s' # 查詢數據的 SQL指令 cursor.execute(sql,(1,)) # 將 SQL指令和數據發給 mysql,執行後拿到結果 res = cursor.fetchone() # 取出查詢結果的一條數據,字典 res = cursor.fetchall() # 取出查詢結果的全部數據,列表套字典 res = cursor.fetchmany(size) # 指定取出查詢結果的數量,列表套字典 print(res) # 打印查詢結果 # 斷開數據庫的鏈接 cursor.close() conn.close()
爲何在編寫 SQL指令時,參數須要使用 execute()
函數傳入,而不是直接在 SQL指令裏面構造好,就是爲了防止 SQL注入攻擊。python
經過構建特殊的輸入值做爲參數,從而完成欺騙 MySQL ,進而執行惡意的 SQL指令。mysql
若是將 SQL指令寫成以下形式: sql = "select * from user where name='%s' and password='%s'" % (user, pwd) # (user,pwd)由用戶輸入 咱們將 user 和 pwd 輸入「admin' or '1」 咱們就能意外的進入到登陸頁面以後了 當用戶輸入 select * from [users] where username= 'admin' or '1' and password='admin' or '1' 根據SQL中邏輯運算的優先級,or低於and,最後的or ‘1’永遠成立,因此該條件表達式結果爲True, 此語句同等於select * from [users]
execute()
函數傳入用戶輸入的參數,這個函數會自動對用戶輸入的信息進行校驗