MySQL->navicat、pyMySQL
阿新 • • 發佈:2019-01-12
MySQL->navicat、pyMySQL
navicat
#1. 測試+連結資料庫
#2. 新建庫
#3. 新建表,新增欄位+型別+約束
#4. 設計表:外來鍵
#5. 新建查詢
#6. 備份庫/表
#注意:
批量加註釋:ctrl+?鍵
批量去註釋:ctrl+shift+?鍵
PyMySQL模組
安裝—> pip3 install pymysql
一、連結、執行sql、關閉(遊標)
通過pyMySQL操作資料庫通常分4步
import pymysql # 1、建立連線 con = pymysql.connect(host = 'localhost',port = 3306,user = 'root',password = '123',database = 'd11') # 2、設定遊標 cursor = con.cursor(pymysql.cursors.DictCursor) # 設定遊標的具體型別,DictCursor以字典的形式拿到欄位名,預設以元組的形式 # 3、執行sql語句 sql = 'select * from emp;' res = cursor.execute(sql) # 執行sql語句,返回sql查詢成功的記錄行數 # print(res) # 需求:具體的一條條記錄 # tag = cursor.fetchone() # 執行語句,返回獲取的一條資料 第一條 # print(tag) # tag = cursor.fetchone() # 執行語句,返回獲取的一條資料 第二條 # print(tag) # print(cursor.scroll(1, mode='relative')) # 指標相對於上一次位置往後偏移1條記錄 # cursor.scroll(res - 2, mode='absolute')# 指標絕對, 遊標永遠從頭開始偏移 tag = cursor.fetchall() # 執行語句,獲取所有資料 print(tag) # 4、 關閉、斷開連線 cursor.close() con.close() # 使用執行的結果: # fetchone())當前遊標往後獲取一行記錄 # fetchall()當前遊標往後所有的記錄 # scroll(num, mode="relative|absolute") # relative: 遊標從當前位置往後移動num行 # ablolute: 遊標從頭往後移動num行, 一般可以結合line來使用能定位到任意位置
二、pymysql處理sql注入
''' sql語法中 註釋: /**/ | -- | # 什麼是sql注入: 通過書寫sql包含(註釋相關的)特殊字元, 讓原有的sql執行順序發生改變, 從而改變執行得到的sql 目的: 繞過原有的sql安全認證, 達到對資料庫攻擊的目的 ''' import pymysql conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='root', db='db2') cursor = conn.cursor(pymysql.cursors.DictCursor) # 登入 # 得到使用者輸入的賬戶密碼 usr = input("請輸入使用者名稱: ") #abc pwd = input("請輸入密碼: ") #123 # sql注入 # 1.知道使用者名稱: abc" -- hehe | ooo # select * from user where usr="abc" -- hehe" and pwd="ooo" # 2.不知道使用者名稱 aaa" or 1=1 -- hehe | 000 # select * from user where usr="aaa" or 1=1 -- hehe" and pwd="000" # 處理方式 # 對輸入的賬戶密碼做完全處理 => 不可能形成達到sql注入的特殊語法 => 正則 # 和資料庫的賬戶密碼進行配對 # sql = 'select * from user where usr="%s" and pwd="%s"' % (usr, pwd) # select * from user where usr="abc" and pwd="123" # res = cursor.execute(sql) # pymysql已經處理了sql注入 sql = 'select * from user where usr=%s and pwd=%s' res = cursor.execute(sql, (usr, pwd)) # print(res) if res: print('login success') else: print('login failed') cursor.close() conn.close()
三、增刪改
import pymysql conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='root', db='db2') cursor = conn.cursor(pymysql.cursors.DictCursor) # 增 # sql1 = 'insert into user(usr, pwd) values (%s, %s)' # cursor執行sql語句,在記憶體中完成了對資料的插入, 但不能將資料存放到硬碟 # 會將id完成自增 # 插入單條 # res = cursor.execute(sql1, ("opq", "123")) # 插入多條 #res = cursor.executemany(sql1, [("aaa", "000"), ("bbb", "111")]) # print(res) # 將記憶體中的資料提交給硬碟, 完成真實意義上的資料儲存 # conn.commit() # 刪 # sql2 = 'delete from user where usr=%s' # res = cursor.execute(sql2, ("aaa")) # print(res) # conn.commit() # 改 sql3 = 'update user set pwd=%s where usr=%s' res = cursor.execute(sql3, ("222", "bbb")) conn.commit() cursor.close() conn.close()