Python MySQLdb 執(zhí)行sql語(yǔ)句時(shí)的參數(shù)傳遞方式
使用MySQLdb連接數(shù)據(jù)庫(kù)執(zhí)行sql語(yǔ)句時(shí),有以下幾種傳遞參數(shù)的方法。
1.不傳遞參數(shù)
conn = MySQLdb.connect(user='root',passwd='123456',host='192.168.101.23',db='cmdb')orange_id = 98sql = 'select * from orange where id=%s' % orange_idcursor = 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庫(kù)使用變量向SQL語(yǔ)句中動(dòng)態(tài)傳遞參數(shù)(sql注入 || 傳參策略)
使用python 3連接Mysql實(shí)現(xiàn)自動(dòng)化增刪查改庫(kù)內(nèi)數(shù)據(jù),由于項(xiàng)目原因很多的sql語(yǔ)句過于復(fù)雜,導(dǎo)致sql語(yǔ)句內(nèi)傳遞的參數(shù)過多而且容易變動(dòng),導(dǎo)致很多同學(xué)不知從何下手動(dòng)態(tài)的傳遞參數(shù),有的采用比較笨的方法拼接sql,但是工作量太大,而且復(fù)雜的語(yǔ)句拼接時(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語(yǔ)句時(shí)的參數(shù)傳遞方式就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持好吧啦網(wǎng)。
相關(guān)文章:
1. 利用單元測(cè)試對(duì)PHP代碼進(jìn)行檢查2. python如何實(shí)現(xiàn)word批量轉(zhuǎn)HTML3. Java8內(nèi)存模型PermGen Metaspace實(shí)例解析4. python excel和yaml文件的讀取封裝5. python3實(shí)現(xiàn)往mysql中插入datetime類型的數(shù)據(jù)6. moment轉(zhuǎn)化時(shí)間戳出現(xiàn)Invalid Date的問題及解決7. python爬蟲實(shí)戰(zhàn)之制作屬于自己的一個(gè)IP代理模塊8. Django 權(quán)限管理(permissions)與用戶組(group)詳解9. App啟動(dòng)優(yōu)化-Android性能優(yōu)化10. 詳解docker pull 下來的鏡像都存到了哪里
