@KerMan_KSP

Что не так между кавычками: "sqlite3.OperationalError: near "̀": syntax error"? Учусь писать бота, по необходимости, но так ничего и не понял что там?

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


		for guild in client.guilds:#т.к. бот для одного сервера, то и цикл выводит один сервер
			for member in guild.members:#цикл, обрабатывающий список участников
				if cursor.execute(f"SELECT id FROM users where id={member.id}").fetchone() == None:#проверка, существует ли участник в БД
					cursor.execute(f"INSERT INTO users VALUES({member.id}, '{member}', '<@{member.id}>', '{guild.id}', 0, 0)")#вводит все данные об участнике в БД
			else:#если существует
				pass
		connection.commit()#применение изменений в БД
		print("Клиент успешно запущен на сервере")#сообщение о готовности
		print(guild.id)#вывод id сервера

Ignoring exception in on_ready
Traceback (most recent call last):
File "C:\Users\Kerman\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "C:\Users\Kerman\Desktop\Z-coin 0.0.2\Discord_Bot.py", line 43, in on_ready
cursor.execute(f"INSERT INTO users VALUES({member.id}, '{member}', '<@{member.id}>', '{guild.id}', 0, 0)")#вводит все данные об участнике в БД
sqlite3.OperationalError: near "̀": syntax error
  • Вопрос задан
  • 6759 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Во-первых, если ты используешь синтаксис INSERT INTO table VALUES (...), то список значений должен в точности повторять список столбцов. У тебя порядок явно не совпадает. Используй синтаксис INSERT INTO table (столбец, столбец, ...) VALUES (значение, значение, ...), так проще контролировать правильность запроса.

Во-вторых, никогда не формируй строку запроса с помощью форматирования строк! Это хороший способ заполучить SQL-инъекцию, Бобби Тейблз подтвердит. =) Используй плейсхолдеры (поищи строку "Never do this -- insecure!", и почитай рядом).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Каждую неделю пишу, что не стоит формировать запросы конкатенацией, интерполяцией и форматированием строк. Используйте prepared statements и будет вам счастье.
Ответ написан
Комментировать
@MrSel
16 лет, изучаю все по немного. Живу в Туркмении
Советую изучить SQLAlchemy или peewee
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы