pymysql模塊
#安裝 pip3 install pymysql
連接、執行sql、關閉遊標mysql
import pymysql #連接 conn=pymysql.connect( host='localhost', user='root', password='123', database='egon', charset='utf8') #遊標 # cursor=conn.cursor() #執行完畢返回的結果集默認以元組顯示 cursor=conn.cursor(cursor=pymysql.cursors.DictCursor) # 以字典的方式顯示數據 # pymysql操做數據庫 #執行sql語句 user = input(">>>:").strip() pwd = input(">>>:").strip() sql='select * from userinfo where name="%s" and password="%s"' %(user,pwd) #注意%s須要加引號 rows=cursor.execute(sql) #執行sql語句,返回sql查詢成功的記錄數目 # 獲取真實數據cursor.fetchone(),cursor.fetchall(),cursor.fetchmany(),相似管道取值,獲取一條,全部,多條 cursor.scroll(1,'relative') # 相對移動 cursor.scroll(3,'absolute') # 絕對移動 cursor.close() conn.close()
sql注入問題sql
# 不要手動去拼接查詢的sql語句 username = input(">>>:").strip() password = input(">>>:").strip() sql = "select * from user where username='%s' and password='%s'"%(username,password) # 用戶名正確 username >>>: abc' -- jjsakfjjdkjjkjs # 用戶名密碼都不對的狀況 username >>>: xxx' or 1=1 -- asdjkdklqwjdjkjasdljad password >>>: ''
解決方法: # 原來是咱們對sql進行字符串拼接 # sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd) # print(sql) # res=cursor.execute(sql) #改寫爲(execute幫咱們作字符串拼接,咱們無需且必定不能再爲%s加引號了) sql="select * from userinfo where name=%s and password=%s" #!!!注意%s須要去掉引號,由於pymysql會自動爲咱們加上 res=cursor.execute(sql,(user,pwd)) #pymysql模塊自動幫咱們解決sql注入的問題,只要咱們按照pymysql的規矩來
增刪改數據庫
# 增 sql = "insert into user(username,password) values(%s,%s)" rows = cursor.excute(sql,('jason','123')) # 修改 sql = "update user set username='jasonDSB' where id=1" rows = cursor.excute(sql) """ 增和改單單執行excute並不會真正影響到數據,須要再執行conn.commit()才能夠完成真正的增改 """ # 一次插入多行記錄 res = cursor,excutemany(sql,[(),(),()] conn.commit() #提交後才發現表中插入記錄成功
查:fetchone,fetchmany,fetchallfetch
import pymysql conn = pymysql.connect( host="127.0.0.1", port=3306, user="root", password="", database="day41", charset="utf8" ) cursor = conn.cursor() # 獲取遊標,執行完畢的結果以元祖顯示 # cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) sql = "select * from userinfo" rows = cursor.execute(sql) res1 = cursor.fetchone() res2 = cursor.fetchone() res3 = cursor.fetchone() res4 = cursor.fetchmany(2) res5 = cursor.fetchall() print(res1) print(res2) print(res3) print(res4) print(res5) conn.commit() cursor.close() conn.close()