Python类型元组无法转换MySQL

我真的不明白元组是如何工作的。但我所知道的是它们看起来像这样。


    (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

如果您能向我解释它是如何工作的并可能帮助我解决错误,我将不胜感激。


Smart猫小萌
浏览 246回答 1
1回答

慕后森

fetchone() 函数以元组形式返回结果。因此,当您使用 fetchone 时,存储在价格变量中的值是一个如下所示的元组:(100,)。然后,当您执行更新查询时,您将传递整个元组,因为您在另一个元组中收到了它。例如,如果价格值返回为100,那么下面是您传递给执行函数的内容。 SQL.execute("UPDATE ..... ", ((100,), USER_ID))因此,参数的第一个元素是元组而不是值,并且您会收到该错误,因为数据库认为那里有一些可以使用的值,但是由于它找到一个元组作为第一个元素,因此您会收到该错误。您应该做的只是传递一个整数值作为价格参数,因此它看起来像这样:SQL.execute("UPDATE ..... ", (100, USER_ID)) 为此,您可以通过在元组前面放置 * 来解压元组,或者从中获取第一个值,例如price[0]。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python