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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql学习【第14篇】:pymysql

發(fā)布時(shí)間:2025/3/21 数据库 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql学习【第14篇】:pymysql 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
pymysql模塊

一、安裝的兩種方法

第一種

#安裝 pip3 install pymysql

第二種

二、鏈接,執(zhí)行sql,關(guān)閉(游標(biāo))

import pymysql user= input('用戶名:>>').strip() pwd= input('密碼:>>').strip()#先鏈接,拿到游標(biāo) conn=pymysql.connect(host='localhost',user='root',password='123456',
             database='day47',charset='utf8') cursor=conn.cursor() #拿到游標(biāo),即mysql > #執(zhí)行sql sql='select * from user where user="%s" and password="%s";'%(user,pwd) print(sql) #注意%s需要加雙引號(hào) rows = cursor.execute(sql) #拿到受影響的行數(shù) cursor.close() conn.close() if rows: print('登錄成功') else: print('登錄失敗')

?

三、execute()之sql注入

注意:符號(hào)--會(huì)注釋掉它之后的sql,正確的語法:--后至少有一個(gè)任意字符

根本原理:就根據(jù)程序的字符串拼接name='%s',我們輸入一個(gè)xxx' -- haha,用我們輸入的xxx加'在程序中拼接成一個(gè)判斷條件name='xxx' -- haha'

最后那一個(gè)空格,在一條sql語句中如果遇到select *
from t1 where id > 3 -- and name='egon';則--之后的條件被注釋掉了#1、sql注入之:用戶存在,繞過密碼 egon' -- 任意字符#2、sql注入之:用戶不存在,繞過用戶與密碼 xxx' or 1=1 -- 任意字符

?

?

?

解決注入

# 原來是我們對(duì)sql進(jìn)行字符串拼接 # sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd) # print(sql) # rows=cursor.execute(sql)#改寫為(execute幫我們做字符串拼接,我們無需且一定不能再為%s加引號(hào)了) sql="select * from userinfo where name=%s
and password=%s" #!!!注意%s需要去掉引號(hào),因?yàn)閜ymysql會(huì)自動(dòng)為我們加上 rows=cursor.execute(sql,[user,pwd])
#pymysql模塊自動(dòng)幫我們解決sql注入的問題,只要我們按照pymysql的規(guī)矩來。

四、增、刪、改:conn.commit()

增:

import pymysql 先鏈接,拿到游標(biāo) conn=pymysql.connect(host='localhost',user='root',password='123456',database='day47') cursor=conn.cursor() #拿到游標(biāo),即mysql > #執(zhí)行sql 增: sql='insert into user1(user,password) VALUES (%s,%s)' print(sql) # rows = cursor.execute(sql,('xixi',123)) #插入一條記錄 rows = cursor.executemany(sql,[('xixi',123),('aaa',456),('ttt',147)]) #插入多行記錄 print('%s row in set (0.00 sec)'%rows)conn.commit() #提交到數(shù)據(jù)庫 cursor.close() conn.close()

刪:

import pymysql #先鏈接,拿到游標(biāo) name=input('>>').strip() conn=pymysql.connect(host='localhost',user='root',password='123456',database='day47') cursor=conn.cursor() #拿到游標(biāo),即mysql > #執(zhí)行sql 刪: sql='delete from user1 where user =%s;' #刪除數(shù)據(jù) print(sql) rows = cursor.execute(sql,(name)) print('%s row in set (0.00 sec)'%rows) conn.commit() #提交到數(shù)據(jù)庫 cursor.close() conn.close()

改:

import pymysql #先鏈接,拿到游標(biāo) id=input('>>').strip() conn=pymysql.connect(host='localhost',user='root',password='123456',database='day47') cursor=conn.cursor() #拿到游標(biāo),即mysql > #執(zhí)行sql 改: sql=' update user1 set password = "5555555" where id=%s;' print(sql) rows = cursor.execute(sql,(id)) print('%s row in set (0.00 sec)'%rows) conn.commit() #提交到數(shù)據(jù)庫 cursor.close() conn.close()

五、查:fetchone,fetchmany,fetchall

---------查fetchone,fetchmany,fetchall----------- import pymysql conn=pymysql.connect(host='localhost',user='root',password='123456',database='day47') cursor=conn.cursor() #拿到游標(biāo),即mysql > #執(zhí)行sql 查: sql='select * from user1;' rows = cursor.execute(sql)#查單條fetchone res1=cursor.fetchone() res2=cursor.fetchone() res3=cursor.fetchone() print(res1) print(res2) print(res3) print(res3[0]) #查多條fetchmany print(cursor.fetchmany(3)) print(cursor.fetchone()) #查所有fetchall print(cursor.fetchall()) print(cursor.fetchone()) #-------光標(biāo)的移動(dòng)-------- #1.絕對(duì)路徑:從文件的開頭位置算起 print(cursor.fetchall()) cursor.scroll(1,mode='absolute') print(cursor.fetchone()) cursor.scroll(3,mode='absolute') print(cursor.fetchone()) #2.相對(duì)路徑: print(cursor.fetchone()) print(cursor.fetchone()) cursor.scroll(2,mode='relative') #相對(duì)于上面的兩條向后移兩條 print(cursor.fetchone()) print('%s row in set (0.00 sec)' %rows) cursor.close() conn.close()

六、獲取插入的最后一條數(shù)據(jù)的自增ID

------查看表中最后一行的iD import pymysql conn=pymysql.connect(host='localhost',user='root',password='123456',
             database='day47',charset='utf8') cursor=conn.cursor()sql='insert into user1(user,password) values(%s,%s);' rows=cursor.execute(sql,('alex','123')) # rows=cursor.executemany(sql,[('yuanhao','123'),('laowu','123'),('kgf','12323')]) conn.commit() print(cursor.lastrowid) #查看表中最后一行的iD cursor.close() conn.close()

?

轉(zhuǎn)載于:https://www.cnblogs.com/kcwxx/p/10145595.html

總結(jié)

以上是生活随笔為你收集整理的mysql学习【第14篇】:pymysql的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。