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

歡迎訪問 生活随笔!

生活随笔

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

数据库

Python连接MySQL数据库执行sql语句时的参数问题

發(fā)布時(shí)間:2025/3/19 数据库 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python连接MySQL数据库执行sql语句时的参数问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

由于工作需要,今天寫了一個(gè)Python小腳本,其中需要連接MySQL數(shù)據(jù)庫,在執(zhí)行sql命令時(shí)需要傳遞參數(shù),結(jié)果出問題了。在網(wǎng)上查了一下,發(fā)現(xiàn)有以下幾種方式傳遞參數(shù):

一.直接把sql查詢語句完整寫入字符串

1 try: 2 connection = MySQLdb.connect(user="secsel",passwd="secsel@55",host="192.168.138.55",db="anbench") 3 except: 4 print "Could not connect to MySQL server." 5 exit( 0 ) 6 7 cursor = connection.cursor() 8 cursor.execute( "SELECT a.id,a.md5,CONCAT(b.`from_name`,'/',b.`suffix`,'/',a.`md5`) FROM apk_sec a,apk_from b WHERE a.`apk_from_id`=b.`id` AND a.md5 = %s", apk_md5)

二.使用參數(shù)替代

city = 'beijing'cur.execute(“SELECT * FROM %s WHERE city = %s”, city)

#注意此處的占位符統(tǒng)統(tǒng)是%s字符串類型,不再區(qū)分字符串,數(shù)字或者其他類型。另外%s不能加引號,如”%s”這是錯誤的寫法。我就是加引號出錯了。

變量替代的時(shí)候還有一種寫法:

cur.execute(“SELECT * FROM %s WHERE city = %s” %city)

前面代碼使用了逗號,這里使用了百分號%。兩者區(qū)別在于變量的解釋方式。使用逗號,變量是作為execute的參數(shù)傳入的,由MySQLdb的內(nèi)置方法把變量解釋成合適的內(nèi)容。使用百分號%則是用Python編譯器對%s執(zhí)行相應(yīng)的替代,這種方法是有漏洞的,有些時(shí)候(比如包含某些特殊字符的時(shí)候)不能正常解析,甚至?xí)凶⑷肼┒础R话闱闆r下都要把變量作為execute的參數(shù)傳入。

3.使用字典dict類型傳遞變量

1 sql = “INSERT INTO user VALUES(%(username)s, %(password)s, %(email)s)” 2 3 value = {“username”:zhangsan, 4 5 “password”:123456, 6 7 “email”:123456@ouvps.com} 8 9 cur.execute(sql, value)

上面這種方法適合字段比較多的時(shí)候,變量順序不會錯。

附上我寫的腳本代碼相關(guān)部分:

1 def get_apkpath(apk_md5): 2 try: 3 connection = MySQLdb.connect(user="***",passwd="***",host="192.168.***.***",db="***") 4 except: 5 print "Could not connect to MySQL server." 6 exit( 0 ) 7 8 cursor = connection.cursor() 9 cursor.execute( "SELECT a.id,a.md5,CONCAT(b.`from_name`,'/',b.`suffix`,'/',a.`md5`) FROM apk_sec a,apk_from b WHERE a.`apk_from_id`=b.`id` AND a.md5 = %s", apk_md5) #注意不要加引號 10 print "Rows selected:", cursor.rowcount 11 12 for row in cursor.fetchall(): 13 print "note : ", row[0], row[1], row[2] 14 cursor.close() 15 return row[2]

?

總結(jié)

以上是生活随笔為你收集整理的Python连接MySQL数据库执行sql语句时的参数问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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