sqlite3.Ошибка OperationalError: нет такого столбца: | Discord.py

#python #sqlite #discord #discord.py #discord.py-rewrite

#python #sqlite #Discord #discord.py #discord.py-переписать

Вопрос:

При попытке выполнить команду изменения префикса, когда я получаю эту ошибку при попытке изменить текущий префикс:

 sqlite3.OperationalError: no such column: e

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:UsersachutAppDataRoamingPythonPython39site-packagesdiscordextcommandsbot.py", line 903, in invoke
    await ctx.command.invoke(ctx)
  File "C:UsersachutAppDataRoamingPythonPython39site-packagesdiscordextcommandscore.py", line 859, in invoke
    await injected(*ctx.args, **ctx.kwargs)
  File "C:UsersachutAppDataRoamingPythonPython39site-packagesdiscordextcommandscore.py", line 94, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: OperationalError: no such column: e
 

Код для команды такой:

 @client.command()
@commands.has_permissions(manage_guild=True)
async def change_prefix(ctx, newprefix: str):
    if len(newprefix) > 5:
        await ctx.send("The server prefix cannot be less than 5 characters in length!")

    else:
        cursor.execute(f"UPDATE guilds SET prefix = {newprefix} WHERE serverid = {ctx.guild.id}")
        connection.commit()
        await ctx.send(embed = discord.Embed(title = f"Prefix Changed to `{newprefix}`",description = f"The bot's server prefix was just changed to `{newprefix}`!", colour=0x04ff00))
 

Извините, если это можно легко исправить, но я действительно плохо разбираюсь в sqlite3. Спасибо!

Комментарии:

1. Предполагая prefix , что в базе данных есть столбец VARCHAR, значение, которое вы устанавливаете, должно быть заключено в одинарные кавычки.

2. Я попробовал использовать одинарные кавычки в discord, и это сработало, но есть ли какой-нибудь способ разрешить пользователю вводить префикс без одинарных кавычек?

3. Если вы используете значения-заполнители в инструкции SQL, то она автоматически заключает вас в кавычки. cursor.execute("UPDATE guilds SET prefix = %s WHERE serverid = %s", [newprefix, ctx.guild.id])

4. Не могли бы вы показать мне пример того, как поместить значения-заполнители в инструкцию SQL?

5. Я получаю эту ошибку: sqlite3. OperationalError: около «%»: синтаксическая ошибка

Ответ №1:

Вам просто нужны одинарные кавычки {newprefix} в команде SQL. При этом пользователю не нужно будет добавлять кавычки в Discord.

 cursor.execute(f"UPDATE guilds SET prefix = '{newprefix}' WHERE serverid = {ctx.guild.id}")