#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 ) )