日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

python mysql倒序_day40:MySQL:python操作mysql:pymysql模块SQL注入攻击

發布時間:2024/9/15 数据库 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python mysql倒序_day40:MySQL:python操作mysql:pymysql模块SQL注入攻击 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

目錄

part1:用python連接mysql

1.用python連接mysql的基本語法

創建連接conn→創建游標對象cursor→執行sql語句execute→獲取數據fetchone→釋放游標對象cursor→關閉連接conn

#(1) 創建連接 host user password database 這四個參數必須寫

conn = pymysql.connect(host="127.0.0.1",user="root",password="123456",database="db0826",charset="utf8",port=3306)#(2) 創建游標對象(該對象可以操作數據庫增刪改查)

cursor =conn.cursor()#(3) 執行sql語句

sql = "select * from employee"

#返回的是數據的總條數

res =cursor.execute(sql)print(res)#(4)獲取數據 fetchone 獲取一條

res =cursor.fetchone()

res=cursor.fetchone()print(res)#(5) 釋放游標對象

cursor.close()#(6) 關閉連接

conn.close()

2.用python 創建&刪除表

1,2,5,6步驟都是不變的,只改變3.4步即可

conn = pymysql.connect(host="127.0.0.1",user="root",password="123456",database="db0826")

cursor=conn.cursor()#1.創建一張表

sql = """create table t1(

id int unsigned primary key auto_increment,

first_name char(10) not null,

last_name char(10) not null,

age int unsigned,

sex tinyint,

money float

)"""

#res = cursor.execute(sql)#print(res)

#2.查看表結構

"""sql = "desc t1"

res = cursor.execute(sql)

print(res) # 6條字段數據

print(cursor.fetchone())

print(cursor.fetchone())

print(cursor.fetchone())

print(cursor.fetchone())

print(cursor.fetchone())

print(cursor.fetchone())"""

#3.刪除表

"""try:

sql = "drop table t1"

res = cursor.execute(sql)

print(res)

except:

pass"""cursor.close()

conn.close()

3.用python操作事務處理

pymysql 操作事務處理時,需要commit提交數據,才會變化,否則rollback回滾.恢復到最初狀態

請注意:你sql語句里寫的是增刪改,你得到的execute的返回值沒有任何意義,所以你fetchone是無效的,只有你sql語句寫的是查詢的操作,fetchone才能獲取到數據

conn = pymysql.connect(host="127.0.0.1",user="root",password="123456",database="db0826")

cursor=conn.cursor()

sql1= "begin"sql2= "update employee set emp_name = '123egon' where id = 1"sql3= "commit"res1=cursor.execute(sql1)

res2=cursor.execute(sql2)

res3=cursor.execute(sql3)#print(res1,res2,res3) # 返回值沒有意義#fetchone 與查詢sql有關 , 增刪改無效;#tup = cursor.fetchone()#print(tup)

cursor.close()

conn.close()

part2:sql注入攻擊

先創建一張用戶名-密碼表

create table usr_pwd(

id int unsigned primary key auto_increment,

username varchar(255) notnull,

password varchar(255) notnull

)

1.sql注入的現象

importpymysql

user= input("請輸入用戶名: >>>").strip()

pwd= input("請輸入密碼: >>>").strip()

conn= pymysql.connect(host="127.0.0.1",user="root",password="123456",database="db0826")

cursor=conn.cursor()

sql= "select * from usr_pwd where username='%s' and password='%s'" %(user,pwd)print(sql)

res=cursor.execute(sql)print(res) #查詢的條數

ifres:print("登錄成功")else:print("登陸失敗")

cursor.close()

conn.close()

輸入時賬號輸入:sfsdf' or 3=3 -- sdfsd 密碼隨意輸入都可以登錄成功

原因:-- 后面的字符串都會被注釋掉, 前面賬號雖然是錯的 但是 2=2是真的 繞開了賬號和密碼的判斷;

select * from usr_pwd where username='afasdfasdfasdf' or 2=2 -- sfasdf' and password='3434

2.預處理機制:防止sql注入現象

使用預處理機制,可以避免絕大多數sql注入的問題

execute 如果參數為2個,將默認開啟預處理

execute(sql , (參數1,參數2,參數3 .... ) )

importpymysql

user= input("請輸入用戶名: >>>").strip()

pwd= input("請輸入密碼: >>>").strip()

conn= pymysql.connect(host="127.0.0.1",user="root",password="123456",database="db0826")

cursor=conn.cursor()

sql= "select * from usr_pwd where username=%s and password=%s"res=cursor.execute(sql, (user,pwd) )print("登陸成功" if res else "登錄失敗")

cursor.close()

conn.close()

part3:python操作mysql增刪改查

1.創建游標時,可以指定返回值類型為其他(默認是元組)

#創建mysql 鏈接

conn = pymysql.connect(host="127.0.0.1",user="root",password="123456",database="db0826")#查詢數據,默認是元組,可以設置返回的類型為字典 pymysql.cursors.DictCursor

cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)

2.python操作mysql增操作

cursor.executemany:可以一次插入多條數據

cursor.lastrowid:獲取最后插入這條數據的id號(僅針對單條數據插入)

#sql增語句

sql = "insert into t1(first_name,last_name,age,sex,money) values(%s,%s,%s,%s,%s)"

#一次插入一條

res = cursor.execute(sql, ("宋","云杰",30,0,15000) )print(res) #1#獲取最后插入這條數據的id號(針對單條數據插入)

print(cursor.lastrowid) #3

#一次插入多條

res = cursor.executemany( sql, [ ("高","云峰",50,1,16000) , ("戈","隆",80,1,17000) , ("袁","偉倬",120,0,130000) , ("劉","欣慰",150,0,18000) ] )print(res) #打印的是插入的條數4

#針對于多條數據,搜最后的id 可以通過倒序查詢id

sql = "select id from t1 order by id desc limit 1"res=cursor.execute(sql)print(res)#獲取最后一個id號

res =cursor.fetchone()print(res)

3.python操作mysql刪操作

sql = "delete from t1 where id = %s"res= cursor.execute(sql , (3,))print(res)ifres:print("刪除成功")else:print("刪除失敗")

4.python操作mysql改操作

sql = "update t1 set first_name = %s where id = %s"res= cursor.execute(sql,("王",4))print(res)ifres:print("修改成功")else:print("修改失敗")

5.python操作mysql查操作

要注意:fetchone? fetchmany fetchall 都是基于上一條數據往下查詢

1.獲取一條數據:fetchone

sql = "select * from t1"res=cursor.execute(sql)print(res) #總條數

res=cursor.fetchone()print(res) #獲取一條

2.獲取多條數據:fetchmany

sql = "select * from t1"res=cursor.execute(sql)print(res) #總條數

data= cursor.fetchmany() #括號里不寫參數,默認搜索的的是一條數據

print(data)

data= cursor.fetchmany(3) #基于上一次獲取完的位置再獲取三條

print(data)

data一共是三條數據,我們可以通過for循環取出每一條數據,并且按照自己的格式進行拼接

for row indata :#print(row)

first_name = row["first_name"]

last_name= row["last_name"]

age= row["age"]if row["sex"] ==0:

sex= "女性"

else:

sex= "男性"money= row["money"]print("姓:{},名:{},年齡:{},姓名:{},收入:{}".format(first_name,last_name,age,sex,money) )

3.獲取所有數據: fetchall

sql = "select * from t1"res=cursor.execute(sql)print(res) #總條數

data=cursor.fetchall()print(data)

4.自定義搜索查詢的位置

1.相對滾動 (正數相對于當前位置往后滾,負數相對于當前位置往后滾.)

#向前滾3個

cursor.scroll(3,mode="relative")

res=cursor.fetchone()print(res)#往后滾2個

cursor.scroll(-2,mode="relative")

res=cursor.fetchone()print(res)

2.絕對滾動 , 永遠基于第一條數據的位置進行移動

cursor.scroll(0,mode="absolute")print(cursor.fetchone())

cursor.scroll(1,mode="absolute")print(cursor.fetchone())

cursor.scroll(3,mode="absolute")print(cursor.fetchone())#往前滾沒有數據,超出范圍 error報錯

cursor.scroll(-1,mode="absolute")print(cursor.fetchone())#在進行增刪改查時,必須提交數據,才會產生影響.

conn.commit()

cursor.close()

conn.close()

part4:導出導入數據庫

1.導出數據庫

第一步: 先退出數據庫

第二步: 切換到對應的路徑(你想將導出的數據庫文件放到哪個目錄)

mysqldump -uroot -p db0824 > db0824.sql

第三步:導出所有內容(整個數據庫)

mysqldump -uroot -p db0824 > db0824.sql

導出數據庫中的單個表

mysqldump -uroot -p db0824 t1 > t1.sql

2.導入數據庫

第一步 : 先創建一個空的數據庫

第二步 : 找到sql對應文件目錄

第三步 : source 路徑/文件

use 數據庫

source D:\db0824.sql

總結

以上是生活随笔為你收集整理的python mysql倒序_day40:MySQL:python操作mysql:pymysql模块SQL注入攻击的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。