не все участники дискорд сервера добавляются в базу данных. Sqlite3 и Discrod.py
При разработке своего бота, я столкнулся с ошибкой
cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 0, 0, 1)") sqlite3.OperationalError: near "anxiety": syntax error.
а так же, у меня на сервере 76 + людей, а в базу данных добавляются не все участники.

Вот код:
import discord
from discord.ext import commands
import sqlite3
from config import settings
intents = discord.Intents.all()
client = commands.Bot(command_prefix = settings['PREFIX'], intents=intents)
client.remove_command('help')
connection = sqlite3.connect('server.db')
cursor = connection.cursor()
@client.event
async def on_ready():
cursor.execute("""CREATE TABLE IF NOT EXISTS users (
name TEXT,
id TEXT,
cash BIGINT,
rep INT,
lvl INT
)""")
connection.commit()
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}, 0, 0, 1)")
print(f"INSERT INTO users VALUES ('{member}', '{member.id}', 0, 0, 1)")
connection.commit()
print('Бот готов к работе!')
Прошу о помощи.
Ответы (1 шт):
Автор решения: Евгений
→ Ссылка
- Убедитесь что у вас включены интенты на сайте разработчика Discord.
- Никогда не используйте
fдля SQL-запросов, это создает дырку в-вашей системе безопасности, вместо этого подставляйте значения.
Было:
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}, 0, 0, 1)")
Стало:
if cursor.execute("SELECT id FROM users WHERE id = ?", (member.id)).fetchone() is None:
cursor.execute("INSERT INTO users VALUES (?,?,?,?,?)", (f'{member}',member.id,0,0,1))
''- кавычки используются только для текстовых данных, сменитеidнаINT, и уберите кавычки.- Уберите отсюда
print, если хотите посмотреть что вносится в базу, проще написать:print(member)print(member.id)
