Python MySQLdb 執(zhí)行sql語句時(shí)的參數(shù)傳遞方式
使用MySQLdb連接數(shù)據(jù)庫執(zhí)行sql語句時(shí),有以下幾種傳遞參數(shù)的方法。
1.不傳遞參數(shù)
conn = MySQLdb.connect(user="root",passwd="123456",host="192.168.101.23",db="cmdb") orange_id = 98 sql = "select * from orange where id=%s" % orange_id cursor = conn.cursor(sql) cursor.execute()
2.傳遞參數(shù)
color = "yellow"
sql = "select * from orange where color = %s"
cursor.execute(sql, color)
注意此處的占位符是%s,無論是字符串、數(shù)字或者其他類型,都是這個(gè)占位符。
另外, %s不能加引號(hào),如'%s', 這是錯(cuò)誤的寫法。
與第一種寫法,有什么區(qū)別呢?
兩者區(qū)別是對(duì)變量的解析:
第一種寫法,使用百分號(hào)%, 是用Python解釋器對(duì)%s執(zhí)行相應(yīng)的替換。這種方法存在漏洞,有些時(shí)候不能正常解析,比如包含某些特殊字符,甚至?xí)斐勺⑷牍舻娘L(fēng)險(xiǎn)。
第二種,變量是作為execute的參數(shù)傳入的,由MySQLdb的內(nèi)置方法把變量解釋成合適的內(nèi)容。
一般情況下,建議使用第二種方法,把變量作為參數(shù)傳遞給execute。
3.使用字典dict類型傳遞參數(shù)
sql = "select * from orange where %(color)s, %(weight)s"
values = {"color": "yellow", "weight": 30}
cursor.execute(sql, values)
這種方式,傳遞的參數(shù)對(duì)應(yīng)關(guān)系比較清晰。尤其是參數(shù)比較多時(shí),使用字典,可以保證傳遞參數(shù)的順序正確。
補(bǔ)充知識(shí):python自動(dòng)化之pymysql庫使用變量向SQL語句中動(dòng)態(tài)傳遞參數(shù)(sql注入 || 傳參策略)
使用python 3連接Mysql實(shí)現(xiàn)自動(dòng)化增刪查改庫內(nèi)數(shù)據(jù),由于項(xiàng)目原因很多的sql語句過于復(fù)雜,導(dǎo)致sql語句內(nèi)傳遞的參數(shù)過多而且容易變動(dòng),導(dǎo)致很多同學(xué)不知從何下手動(dòng)態(tài)的傳遞參數(shù),有的采用比較笨的方法拼接sql,但是工作量太大,而且復(fù)雜的語句拼接時(shí)很容易出錯(cuò)且不好維護(hù),所以為大家整理了%s占位符的字典傳參的用法
import pymysql
db = pymysql.connect(host="119.XX.XX.XX",
port=3306,
user="XXXXXXXX",
passwd="XXXXXXXXXXXXX",
db="XXXXXX",
charset='utf8')
# %s 占位符為需要傳遞的參數(shù),切記不要加''雙引號(hào),要不然會(huì)報(bào)錯(cuò)
sql = "SELECT totalusercount * 1.4 FROM mm_project_uv_outdoor WHERE poiid = %s AND currenttime = %s"
cursor = db.cursor()
# 以下為傳遞多個(gè)參數(shù)的用法
cursor.execute(sql,['B00140N5CS','2019-04-23'])
# 傳遞單個(gè)參數(shù)時(shí) cursor.execute(sql,'B00140N5CS')
print(cursor.fetchall())
db.close()
運(yùn)行后就能得到所查詢的數(shù)據(jù)了

最后建議大家多看官方的文檔或標(biāo)準(zhǔn)教程,這樣更有益學(xué)習(xí)
以上這篇Python MySQLdb 執(zhí)行sql語句時(shí)的參數(shù)傳遞方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
python3.6之xlwt如何設(shè)置單元格對(duì)齊方式
這篇文章主要介紹了python3.6之xlwt如何設(shè)置單元格對(duì)齊方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06
Python使用Pickle模塊進(jìn)行數(shù)據(jù)保存和讀取的講解
今天小編就為大家分享一篇關(guān)于Python使用Pickle模塊進(jìn)行數(shù)據(jù)保存和讀取的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-04-04
Python腳本破解壓縮文件口令實(shí)例教程(zipfile)
這篇文章主要給大家介紹了關(guān)于Python腳本破解壓縮文件口令(zipfile)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用Python具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06
Python數(shù)據(jù)可視化實(shí)現(xiàn)多種圖例代碼詳解
這篇文章主要介紹了Python數(shù)據(jù)可視化實(shí)現(xiàn)多種圖例代碼詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07
Flask框架實(shí)現(xiàn)的前端RSA加密與后端Python解密功能詳解
這篇文章主要介紹了Flask框架實(shí)現(xiàn)的前端RSA加密與后端Python解密功能,結(jié)合實(shí)例形式詳細(xì)分析了flask框架前端使用jsencrypt.js加密與后端Python解密相關(guān)操作技巧,需要的朋友可以參考下2019-08-08
Scrapy的Pipeline之處理CPU密集型或阻塞型操作詳解
這篇文章主要介紹了Scrapy的Pipeline之處理CPU密集型或阻塞型操作詳解,Twisted框架的reactor適合于處理短的、非阻塞的操作,Twisted提供了線程池來在其他的線程而不是主線程(Twisted的reactor線程)中執(zhí)行慢的操作,需要的朋友可以參考下2023-10-10
Python list和str互轉(zhuǎn)的實(shí)現(xiàn)示例
這篇文章主要介紹了Python list和str互轉(zhuǎn)的實(shí)現(xiàn)示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11

