使用%s的Python MySQL Connector數(shù)據(jù)庫查詢失敗我有一個基本程序,應(yīng)該查詢包含用戶信息的數(shù)據(jù)庫。我正在嘗試為特定用戶選擇信息并將其打印到控制臺。這是我的代碼: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輸入框中獲取用戶名。當我執(zhí)行此代碼時,我收到以下錯誤: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我已經(jīng)嘗試將%s放在查詢中的引號中,但隨后它逐字地搜索用戶名'%s'并且不返回任何內(nèi)容。如何更改我的代碼,以便只查詢該用戶的數(shù)據(jù)庫?謝謝。僅供參考:我使用的是python 3.3。
2 回答

慕森卡
TA貢獻1806條經(jīng)驗 獲得超8個贊
將您的funcursor.execute(query, uName)
電話改為:
funcursor.execute(query, (uName, ))
第二個參數(shù)execute
采用字符串的列表/元組,而不是字符串。上面的調(diào)用在傳入字符串之前創(chuàng)建了元組execute
,因此不會拋出任何錯誤。
execute
獲取字符串列表/元組的原因是因為它不能事先知道為了滿足您的查詢需要多少字符串

慕碼人2483693
TA貢獻1860條經(jīng)驗 獲得超9個贊
這是因為execute
期望列表或元組值作為第二個參數(shù)。逗號在現(xiàn)場創(chuàng)建一個元組,以滿足函數(shù)的要求。execute
不知道在讀取之前需要在查詢中替換多少個字符串,并且它不希望兩次讀取您的查詢。所以它只是要求您查詢,然后是字符串列表或元組。即使你只想替換一個字符串,你必須先將它變成一個列表或元組,然后再傳入它。
添加回答
舉報
0/150
提交
取消