您好,登錄后才能下訂單哦!
使用MySQLdb連接數(shù)據(jù)庫執(zhí)行sql語句時,有以下幾種傳遞參數(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ù)字或者其他類型,都是這個占位符。
另外, %s不能加引號,如'%s', 這是錯誤的寫法。
與第一種寫法,有什么區(qū)別呢?
兩者區(qū)別是對變量的解析:
第一種寫法,使用百分號%, 是用Python解釋器對%s執(zhí)行相應的替換。這種方法存在漏洞,有些時候不能正常解析,比如包含某些特殊字符,甚至會造成注入攻擊的風險。
第二種,變量是作為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ù)對應關(guān)系比較清晰。尤其是參數(shù)比較多時,使用字典,可以保證傳遞參數(shù)的順序正確。
補充知識:python自動化之pymysql庫使用變量向SQL語句中動態(tài)傳遞參數(shù)(sql注入 || 傳參策略)
使用python 3連接Mysql實現(xiàn)自動化增刪查改庫內(nèi)數(shù)據(jù),由于項目原因很多的sql語句過于復雜,導致sql語句內(nèi)傳遞的參數(shù)過多而且容易變動,導致很多同學不知從何下手動態(tài)的傳遞參數(shù),有的采用比較笨的方法拼接sql,但是工作量太大,而且復雜的語句拼接時很容易出錯且不好維護,所以為大家整理了%s占位符的字典傳參的用法
import pymysql db = pymysql.connect(host="119.XX.XX.XX", port=3306, user="XXXXXXXX", passwd="XXXXXXXXXXXXX", db="XXXXXX", charset='utf8') # %s 占位符為需要傳遞的參數(shù),切記不要加''雙引號,要不然會報錯 sql = "SELECT totalusercount * 1.4 FROM mm_project_uv_outdoor WHERE poiid = %s AND currenttime = %s" cursor = db.cursor() # 以下為傳遞多個參數(shù)的用法 cursor.execute(sql,['B00140N5CS','2019-04-23']) # 傳遞單個參數(shù)時 cursor.execute(sql,'B00140N5CS') print(cursor.fetchall()) db.close()
運行后就能得到所查詢的數(shù)據(jù)了
最后建議大家多看官方的文檔或標準教程,這樣更有益學習
以上這篇Python MySQLdb 執(zhí)行sql語句時的參數(shù)傳遞方式就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持億速云。
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。