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注入攻击的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: php 提取登录QQsid_php模拟登
- 下一篇: 华为平板安装python_极致安卓—Te