【问题标题】:Python type tuple cannot be converted MySQLPython 类型元组不能转换 MySQL
【发布时间】:2021-02-02 12:04:10
【问题描述】:

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

    (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

非常感谢您能向我解释它的工作原理并可能帮助我解决错误。

【问题讨论】:

    标签: python mysql sql discord.py discord.py-rewrite


    【解决方案1】:

    fetchone() 函数以元组的形式返回结果。因此,当您使用 fetchone 时,存储在 price 变量中的值是一个元组,如下所示:(100,)。 然后,当您执行更新查询时,您将传递整个元组,因为您在另一个元组中收到它。例如,如果价格值返回为100,那么下面是您传递给执行函数的内容。 SQL.execute("UPDATE ..... ", ((100,), USER_ID))

    所以你的参数的第一个元素是一个元组而不是一个值,你得到这个错误是因为数据库认为那里有一些可以使用的值,但是因为它找到一个元组而不是你的第一个元素得到那个错误。 你应该做的只是传递一个整数值作为价格参数,所以它看起来像:SQL.execute("UPDATE ..... ", (100, USER_ID)) 为此,您可以通过在元组前面放一个 * 来解压缩元组,或者从中获取第一个值,例如 price[0]

    【讨论】:

      猜你喜欢
      • 2012-02-25
      • 1970-01-01
      • 2020-06-04
      • 1970-01-01
      • 1970-01-01
      • 2016-07-27
      • 2021-11-14
      • 2020-04-13
      • 1970-01-01
      相关资源
      最近更新 更多