sqlite3.OperationalError: рядом с «s»: синтаксическая ошибка

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

#python #mysql #sqlite #discord.py

Вопрос:

Я создавал discord-бота. Я попытался добавить экономичности своему боту, используя базу данных SQLite3. Но когда я создал столбец, я получил сообщение об ошибке:

 cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 30, 0, 0, 1, {guild.id})")
sqlite3.OperationalError: near "s": syntax error
  

А также, вот код:

 @client.event
async def on_ready():
    cursor.execute("""CREATE TABLE IF NOT EXISTS users (
        name TEXT,
        id INT,
        cash BIGINT,
        rep INT,
        xp INT,
        lvl INT,
        server_id INT
    )""")

    for guild in client.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}', {member.id}, 30, 0, 0, 1, {guild.id})")
                else:
                    pass

        connection.commit()
  

Ответ №1:

Ошибка при внедрении кода!Рассмотрим, что произойдет, если member Foo's Bar строковое значение равно . В конечном итоге вы выполните

 INSERT INTO users VALUES ('Foo's Bar...
                            -- ^ Syntax error
  

Я считаю

 cursor.execute(f"SELECT id FROM users WHERE id = {member.id}")
cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 30, 0, 0, 1, {guild.id})")
  

должно быть

 cursor.execute("SELECT id FROM users WHERE id = ?", ( member.id, ))
cursor.execute("INSERT INTO users VALUES (?, ?, 30, 0, 0, 1, ?)",
   ( str(member), member.id, guild.id ) )