亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用%s的Python MySQL Connector數據庫查詢失敗

使用%s的Python MySQL Connector數據庫查詢失敗

弒天下 2019-08-23 10:02:38
使用%s的Python MySQL Connector數據庫查詢失敗我有一個基本程序,應該查詢包含用戶信息的數據庫。我正在嘗試為特定用戶選擇信息并將其打印到控制臺。這是我的代碼:import mysql.connector funcon = mysql.connector.connect(user='root', password='pass', host='127.0.0.1', database='fundata')funcursor = funcon.cursor()query = ("SELECT * FROM funtable WHERE userName=%s")uName = 'user1'funcursor.execute(query, uName)for (userName) in funcursor:     print("{}".format(userName))我將用戶名存儲在變量中,因為稍后我計劃從tkinter輸入框中獲取用戶名。當我執行此代碼時,我收到以下錯誤:mysql.connector.errors.ProgrammingError: 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '%s' at line 1我已經嘗試將%s放在查詢中的引號中,但隨后它逐字地搜索用戶名'%s'并且不返回任何內容。如何更改我的代碼,以便只查詢該用戶的數據庫?謝謝。僅供參考:我使用的是python 3.3。
查看完整描述

2 回答

?
慕森卡

TA貢獻1806條經驗 獲得超8個贊

將您的funcursor.execute(query, uName)電話改為:

funcursor.execute(query, (uName, ))

第二個參數execute采用字符串的列表/元組,而不是字符串。上面的調用在傳入字符串之前創建了元組execute,因此不會拋出任何錯誤。

execute獲取字符串列表/元組的原因是因為它不能事先知道為了滿足您的查詢需要多少字符串


查看完整回答
反對 回復 2019-08-23
?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

這是因為execute期望列表或元組值作為第二個參數。逗號在現場創建一個元組,以滿足函數的要求。execute不知道在讀取之前需要在查詢中替換多少個字符串,并且它不希望兩次讀取您的查詢。所以它只是要求您查詢,然后是字符串列表或元組。即使你只想替換一個字符串,你必須先將它變成一個列表或元組,然后再傳入它。

查看完整回答
反對 回復 2019-08-23
  • 2 回答
  • 0 關注
  • 1130 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號