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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

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

数据库

利用PyMySQL模块操作数据库

發(fā)布時(shí)間:2025/5/22 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用PyMySQL模块操作数据库 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

連接到數(shù)據(jù)庫(kù)

import pymysql # 創(chuàng)建鏈接得到一個(gè)鏈接對(duì)象 conn = pymysql.Connect(host="127.0.0.1", # 數(shù)據(jù)庫(kù)服務(wù)器主機(jī)地址user="root", # 用戶(hù)名password="root", # 密碼database="test", #數(shù)據(jù)庫(kù)名稱(chēng)port=3306, # 端口號(hào) 可選 整型charset="utf8" # 編碼 可選 )

和命令行一直的是是要指定IP端口,用戶(hù)授權(quán),不過(guò)用戶(hù)要操作的數(shù)據(jù)庫(kù)必須要在pymysql連接之前就要存在,不然就要報(bào)錯(cuò)。

獲得游標(biāo)

,類(lèi)比命令行,登錄命令行之后會(huì)有mysql>的提示符提示你進(jìn)行操作,用代碼操作數(shù)據(jù)庫(kù)需要獲得相應(yīng)的游標(biāo),傳入的pymysql.cursors.DictCursor參數(shù)是指定返回的結(jié)果是字典類(lèi)型的數(shù)據(jù),pymysql會(huì)給字典加上字典容器,最后返回的是列表,列表的元素時(shí)字典,字典的鍵值是對(duì)應(yīng)的字段和數(shù)據(jù)

cursor = conn.cursor(pymysql.cursors.DictCursor) # 將查詢(xún)結(jié)果做成字典的格式

執(zhí)行SQL語(yǔ)句

我們通常將sql語(yǔ)句放在字符串中,比如

select_sql = ""select * from table_name"" # 要在sql語(yǔ)句中指定數(shù)據(jù)表了,要不然查不到數(shù)據(jù) insert_sql = "insert into table_name( name,age) values(%s,%s)"%("ruhai",18) updata_sql = "update user set username='superamdin' where name = admin"

我們將寫(xiě)好的SQL語(yǔ)句交給cursor.execute()來(lái)執(zhí)行,就相當(dāng)于你把命令敲在命令行中并敲了一下回車(chē),得到sql語(yǔ)句的執(zhí)行結(jié)果。

cursor.execute(select_sql) cursor.commit() # 因?yàn)閜ymysql 模塊默認(rèn)是啟用事務(wù)的 你的sql語(yǔ)句 如果不提交 相當(dāng)于沒(méi)有執(zhí)行

獲得結(jié)果

我們用一個(gè)變量值來(lái)獲得查詢(xún)的結(jié)果

res = cursor.execute(select_sql)

直接打印可以得到結(jié)果的條目數(shù)

print(res)

獲得具體數(shù)據(jù)

cursor.fetchone() cursor.fetchall()

游標(biāo)的移動(dòng)

在數(shù)據(jù)庫(kù)中,游標(biāo)是一個(gè)十分重要的概念。游標(biāo)提供了一種對(duì)從表中檢索出的數(shù)據(jù)進(jìn)行操作的靈活手段,就本質(zhì)而言,游標(biāo)實(shí)際上是一種能從包括多條數(shù)據(jù)記錄的結(jié)果集中每次提取一條記錄的機(jī)制。游標(biāo)總是與一條SQL 查詢(xún)語(yǔ)句相關(guān)聯(lián)因?yàn)橛螛?biāo)由結(jié)果集(可以是零條、一條或由相關(guān)的選擇語(yǔ)句檢索出的多條記錄)和結(jié)果集中指向特定記錄的游標(biāo)位置組成。當(dāng)決定對(duì)結(jié)果集進(jìn)行處理時(shí),必須聲明一個(gè)指向該結(jié)果集的游標(biāo)。如果曾經(jīng)用C 語(yǔ)言寫(xiě)過(guò)對(duì)文件進(jìn)行處理的程序,那么游標(biāo)就像您打開(kāi)文件所得到的文件句柄一樣,只要文件打開(kāi)成功,該文件句柄就可代表該文件。對(duì)于游標(biāo)而言,其道理是相同的。

cursor.scroll(1,mode='relative') # 相對(duì)當(dāng)前位置移動(dòng)【1:表示向下移動(dòng)一行,-1:表示向上移動(dòng)一行】 cursor.scroll(1,mode='absolute') # 相對(duì)絕對(duì)位置移動(dòng) 【1:表示向上移動(dòng)一行,-1:表示向下移動(dòng)一行】

敏感信息的防護(hù)

防止sql注入

來(lái)看下面的代碼

username=input() password =input() # 正常構(gòu)造語(yǔ)句的情況 sql = "select user,pwd from User where user='%s' and pwd='%s'" % (username,password)row_count = cursor.execute(sql)

其實(shí)用戶(hù)可以這樣輸入實(shí)現(xiàn)免帳號(hào)登錄:

username: ‘or 1 = 1 –-password:

如若沒(méi)有做特殊處理,那么這個(gè)非法用戶(hù)直接登陸進(jìn)去了.

當(dāng)輸入了上面的用戶(hù)名和密碼,服務(wù)端的sql就變成:

sql = "select user,pwd from User where user=‘'or 1 = 1 –-' and pwd='%s'"

因?yàn)闂l件后面username=”or 1=1 用戶(hù)名等于 空 或1=1 那么這個(gè)條件一定會(huì)成功;然后后面加兩個(gè)-,這意味著注釋,它將后面的語(yǔ)句注釋,讓他們不起作用,這樣語(yǔ)句永遠(yuǎn)都能正確執(zhí)行,用戶(hù)輕易騙過(guò)系統(tǒng),獲取合法身份。

使用pymysql提供的參數(shù)化語(yǔ)句防止注入

#執(zhí)行參數(shù)化查詢(xún) row_count=cursor.execute("select user,pwd from User where user='%s' and pwd='%s'" ,(username,password)) #execute()函數(shù)本身就有接受SQL語(yǔ)句變量的參數(shù)位,只要正確的使用(直白一點(diǎn)就是:使用”逗號(hào)”,而不是”百分號(hào)”)就可以對(duì)傳入的值進(jìn)行correctly轉(zhuǎn)義,從而避免SQL注入的發(fā)生。

數(shù)據(jù)一致性驗(yàn)證

小明有100塊 準(zhǔn)備給小花轉(zhuǎn)50,如果這個(gè)時(shí)候突然發(fā)生了一些事情導(dǎo)致這個(gè)數(shù)據(jù)值存成功了一半,把小明的錢(qián)從系統(tǒng)中扣件掉了,但是沒(méi)有給小花加上去,那么就會(huì)造成數(shù)據(jù)的不一致,這個(gè)時(shí)候應(yīng)該加上容錯(cuò)機(jī)制提高程序的健壯性,和數(shù)據(jù)的安全。

try:cursor.execute("update moneyTable set money = money - 50 where name = '小明'")#如果小花的賬戶(hù)出問(wèn)題了 無(wú)法更新數(shù)據(jù) 那就需要回滾cursor.execute("update moneyTable set money = money + 50 where name = '小花'")conn.commit() except:conn.rollback()

關(guān)閉連接

cursor.close() conn.close()

操作數(shù)據(jù)庫(kù)的完整代碼

import pymysqlconn = pymysql.Connect(host="127.0.0.1", user="root", password="admin", database="day42", port=3306, charset="utf8" ) cursor = conn.cursor(pymysql.cursors.DictCursor)sql = "insert into user(username,pwd) values(%s,%s)"try:cursor.execute(sql,args= (user,name))conn.commit() except:conn.rollback() cursor.close() conn.close()

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

總結(jié)

以上是生活随笔為你收集整理的利用PyMySQL模块操作数据库的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

主站蜘蛛池模板: 欧美一级一区 | 五月天婷婷社区 | 欧美日韩精品一区二区三区四区 | 真实人妻互换毛片视频 | 神马午夜麻豆 | 成人在线免费视频播放 | 日韩欧美视频一区 | 国产精品久久久影院 | 青青草成人在线观看 | 日韩a级一片 | 懂色av中文一区二区三区天美 | 粉嫩av网站| 免费成人美女在线观看 | 三级视频在线 | 日韩av无码中文字幕 | 欧美视频免费在线 | 黄色免费一级 | 337p粉嫩色噜噜噜大肥臀 | 日韩 欧美 国产 综合 | 国产亚洲精品久久久久久无几年桃 | 中文字幕影片免费在线观看 | 9999在线视频 | 91国产视频在线 | 已满十八岁免费观看全集动漫 | 舐丝袜脚视频丨vk | 欧美日韩一区二区三区视频 | 懂色av蜜臀av粉嫩av分享吧最新章节 | 风韵少妇性饥渴推油按摩视频 | 一区二区三区色 | 久久久久免费精品 | 麻豆一区二区三区精品视频 | 亚洲欧美在线视频 | 一级中文片| 免费吃奶摸下激烈视频 | 国产成人精品一区二区三区福利 | 天海翼视频在线观看 | 国产一区二区三区影院 | 视频二区中文字幕 | 亚洲欧美日韩精品永久在线 | 国产成人精品一区 | 日本亚洲视频 | 毛片在线免费播放 | 狠狠人妻久久久久久综合麻豆 | 91在线观看成人 | 在线免费视频一区 | 999成人网| 久久国产毛片 | 欧美日韩亚洲二区 | 日本伦理一区 | 插女生下面| 成人免费观看视频大全 | 久久久免费毛片 | 快色视频在线观看 | 高h在线观看 | 日日摸日日添日日碰9学生露脸 | 国产在线1区 | 亚洲成人三区 | 国产自精品 | 伊人精品视频 | 久久精品国产一区二区电影 | 色综合天天综合网国产成人网 | 最新中文字幕免费 | 五十路av| 中文字幕国产日韩 | 综合色站导航 | 91九色在线播放 | av免费福利 | 亚洲AV无码精品黑人黑人 | www.爱操| 久久久久久9| 国产专区av | 国产一区二区在线观看免费 | 射婷婷 | 亚洲人和日本人hd | 亚洲播放器 | 欧美大片a| 操三八男人的天堂 | 中文字幕1区2区 | 成人免费视频观看视频 | 亚洲高清中文字幕 | 91久久久久久 | 精品一区二区三区在线观看视频 | 日韩在线视频免费 | 午夜插插| h无码动漫在线观看 | 天堂成人在线观看 | 欧美怡红院一区二区三区 | 亚洲性图一区二区 | 国产精品电影网 | www.亚洲天堂.com | 黄网站免费在线观看 | 97超碰中文字幕 | 日韩高清不卡一区 | 337p亚洲精品色噜噜狠狠 | 粗大黑人巨茎大战欧美成人免费看 | 国产精品第一国产精品 | 小说肉肉视频 | 日本精品免费在线观看 | 成人免费a视频 |