Дискорд бот (BunkerBot)

Хочу сделать бота в дискорде на подобии игры\фильма бункер, и у меня проблема с sqlite3 Код:

import discord
from discord.ext import commands
import random
import sqlite3

intents = discord.Intents.default()
intents.message_content = True

PREFIX = '.'

bot = commands.Bot(command_prefix=PREFIX, intents = discord.Intents.all())
connecting = sqlite3.connect('server.db')
cursor = connecting.cursor()

@bot.event
async def on_ready():
    cursor.execute("""CREATE TABLE IF NOT EXISTS users (
        fobia TEXT,
        id INT
        
    )""")
    for guild in bot.guilds:
        for member in guild.members:
            if cursor.execute(f"SELECT id FROM users WHERE id = {member.id}").fetchone() is None:
                cursor.execute(f"INSERT INTO users VALUES ('{member.id}', 'none')")
            else:
                pass
    connecting.commit()
    print('BOT CONNECT')
@bot.event
async def on_member_join(member):
    for guild in bot.guilds:
        for member in guild.members:
            if cursor.execute(f"SELECT id FROM users WHERE id = {member.id}").fetchone() is None:
                cursor.execute(f"INSERT INTO users VALUES ('{member.id}', 'none')")
                connecting.commit()
            else:
                pass

@bot.command()
async def b(ctx, member: discord.Member):


    fobia = ['Ятрофобия ||боязнь врачей||', 'Эргофобия ||боязнь работать, совершать какие-либо действия||','Эйхофобия ||боязнь произносить или выслушивать добрые пожелания||', 'Уранофобия ||боязнь смотреть в небо||']

    fobia1 = random.choice(fobia)

    cursor.execute("UPDATE users SET fobia = {} WHERE id = {}".format(fobia1, member.id))
    connecting.commit()

    embed = discord.Embed(description=f'**--------------------------------ИНФОРМАЦИЯ---------------------------------**\n'
                                      f"""**Фобия/Страх - {cursor.execute("SELECT charapter FROM users WHERE id {}".format(member.id)).fetchone()[0]}.**\n""",color=discord.Color.dark_blue())

    await member.send(embed=embed)

bot.run('TOKEN')

Проблема в том что у меня идёт какая-то фобия например (Ятрофобия) и после слова боязнь идёт ошибка. Ошибка:

  File "C:\pythonProject1\.venv\Lib\site-packages\discord\ext\commands\core.py", line 235, in wrapped
    ret = await coro(*args, **kwargs)
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\pythonProject1\DiscordBot.py", line 133, in b
    cursor.execute("UPDATE users SET fobia = {} WHERE id = {}".format(fobia1, member.id))
sqlite3.OperationalError: near "ядов": syntax error

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

Traceback (most recent call last):
  File "C:\pythonProject1\.venv\Lib\site-packages\discord\ext\commands\bot.py", line 1350, in invoke
    await ctx.command.invoke(ctx)
  File "C:\pythonProject1\.venv\Lib\site-packages\discord\ext\commands\core.py", line 1029, in invoke
    await injected(*ctx.args, **ctx.kwargs)  # type: ignore
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\pythonProject1\.venv\Lib\site-packages\discord\ext\commands\core.py", line 244, in wrapped
    raise CommandInvokeError(exc) from exc
discord.ext.commands.errors.CommandInvokeError: Command raised an exception: OperationalError: near "ядов": syntax error```

Ответы (2 шт):

Автор решения: BArbosspirat

я думаю, что проблема в том, что нет кавычек у fobia1.

cursor.execute("UPDATE users SET fobia = ? WHERE id = ?", [fobia1,member.id])

можно сделать так. Также вы можете так и использовать f строки.

cursor.execute(f"UPDATE users SET fobia = '{fobia1}' WHERE id = {member.id}") 

Немного дополню f строки не безопасны, так что лучше использовать первый вариант. f строки могут привести к SQL injection.

→ Ссылка
Автор решения: Syirezz

Для передачи значений в запрос SQL, вместо использования .format(). В вашем случае, вы можете передать значения напрямую в кортеже после запроса, как показано ниже:

cursor.execute("UPDATE users SET fobia = ? WHERE id = ?", (fobia1, member.id))
→ Ссылка