我真的不明白元組是如何工作的。但我所知道的是它們看起來像這樣。 (1, variable)但我不斷收到錯誤:Python type tuple cannot be converted有人可以幫忙嗎這是我的代碼: @client.command()async def buy(ctx, item: str): USER_ID = ctx.message.author.id write_log("Buy command requested") #write_log("Sending GET request to Cosmos API...") try: SQL.execute("SELECT price FROM shop WHERE itemname = %s", (item,)) price = SQL.fetchone() SQL.execute("SELECT balance FROM Accounts WHERE user_id = %s", (USER_ID,)) SQL.execute("UPDATE Accounts SET balance = balance - %s WHERE user_id = %s", (price, USER_ID)) db.commit() await ctx.send(f"Successfully bought **{item}** for **{price} Rollars**.") except Exception as ex: write_log('ERROR') full_traceback = traceback.format_exc() write_log(f'Errored whilst sending ctx(embed), (about): {ex} {full_traceback}')完整的回溯:Traceback (most recent call last): File "Bot.py", line 316, in buy SQL.execute("UPDATE Accounts SET balance = balance - %s WHERE user_id = %s", (price, USER_ID)) File "/home/vihanga/lib/python3.8/site-packages/mysql/connector/cursor_cext.py", line 248, in execute prepared = self._cnx.prepare_for_mysql(params) File "/home/vihanga/lib/python3.8/site-packages/mysql/connector/connection_cext.py", line 626, in prepare_for_mysql result = self._cmysql.convert_to_mysql(*params)_mysql_connector.MySQLInterfaceError: Python type tuple cannot be converted如果您能向我解釋它是如何工作的并可能幫助我解決錯誤,我將不勝感激。
1 回答

慕后森
TA貢獻1802條經驗 獲得超5個贊
fetchone() 函數以元組形式返回結果。因此,當您使用 fetchone 時,存儲在價格變量中的值是一個如下所示的元組:(100,)
。然后,當您執行更新查詢時,您將傳遞整個元組,因為您在另一個元組中收到了它。例如,如果價格值返回為100
,那么下面是您傳遞給執行函數的內容。 SQL.execute("UPDATE ..... ", ((100,), USER_ID))
因此,參數的第一個元素是元組而不是值,并且您會收到該錯誤,因為數據庫認為那里有一些可以使用的值,但是由于它找到一個元組作為第一個元素,因此您會收到該錯誤。您應該做的只是傳遞一個整數值作為價格參數,因此它看起來像這樣:SQL.execute("UPDATE ..... ", (100, USER_ID))
為此,您可以通過在元組前面放置 * 來解壓元組,或者從中獲取第一個值,例如price[0]
。
添加回答
舉報
0/150
提交
取消