我真的不明白元组是如何工作的。但我所知道的是它们看起来像这样。 (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
提交
取消