Почему не работает вставка данных в таблицу через слеш команду?
Моя догадка, что это из за ошибки в написании части с рандомным числом. Прошу поправить код или хотя бы дать наводку, как это исправить.
. В таблице: 4 колонки
import disnake from disnake.ext import commands from main import connection, cursor import random import pymysql class Idenificator(commands.Cog): def __init__(self, bot: commands.Bot): self.bot = bot @commands.slash_command(description="Отправка запроса на выдачу матов", test_guilds=[1222102533577900112]) async def new_token(self, inter: disnake.ApplicationCommandInteraction, Имя_Фамилия: str, CID: str): try: cursor.execute('SELECT * FROM identificator WHERE cid = ?', (CID,)) existing_user = cursor.fetchone() if existing_user: embed = disnake.Embed(title="Ошибка", description="Уже существует жетон зарегистрированнный для этого CID", color=disnake.Color.red()) await self.response.send_message(embed=embed) connection.close() return check_db = cursor.execute('SELECT * FROM identificator WHERE token = ?', (final_number,)) number_in_database = cursor.fetchone while number_in_database: random_number = random.randint(0, 99999999) formatted_number = f'{random_number:08d}' final_number = f'{formatted_number[:4]}-{formatted_number[4:]}' number_in_database = check_db(final_number) cursor.execute('INSERT INTO identificator (nickname, cid, token) VALUES (?, ?, ?)', (Имя_Фамилия, CID, final_number)) connection.commit() connection.close() embed = disnake.Embed(title="Жетон успешно создан. Вот ваш жетон", description=f"/do На груди закреплен жетон: [Организация | Звание | {final_number}]", color=disnake.Color.green()) await self.response.send_message(embed=embed) except Exception as e: embed = disnake.Embed(title="Ошибка", description=f"Произошла ошибка при выполнении команды: {e}", color=disnake.Color.red()) await self.response.send_message(embed=embed) def setup(bot: commands.Bot): bot.add_cog(Idenificator(bot)) |
import disnake from disnake.ext import commands from main import connection, cursor import random import pymysql class Idenificator(commands.Cog): def __init__(self, bot: commands.Bot): self.bot = bot @commands.slash_command(description="Отправка запроса на выдачу матов", test_guilds=[1222102533577900112]) async def new_token(self, inter: disnake.ApplicationCommandInteraction, Имя_Фамилия: str, CID: str): try: cursor.execute('SELECT * FROM identificator WHERE cid = ?', (CID,)) existing_user = cursor.fetchone() if existing_user: embed = disnake.Embed(title="Ошибка", description="Уже существует жетон зарегистрированнный для этого CID", color=disnake.Color.red()) await self.response.send_message(embed=embed) connection.close() return check_db = cursor.execute('SELECT * FROM identificator WHERE token = ?', (final_number,)) number_in_database = cursor.fetchone while number_in_database: random_number = random.randint(0, 99999999) formatted_number = f'{random_number:08d}' final_number = f'{formatted_number[:4]}-{formatted_number[4:]}' number_in_database = check_db(final_number) cursor.execute('INSERT INTO identificator (nickname, cid, token) VALUES (?, ?, ?)', (Имя_Фамилия, CID, final_number)) connection.commit() connection.close() embed = disnake.Embed(title="Жетон успешно создан. Вот ваш жетон", description=f"/do На груди закреплен жетон: [Организация | Звание | {final_number}]", color=disnake.Color.green()) await self.response.send_message(embed=embed) except Exception as e: embed = disnake.Embed(title="Ошибка", description=f"Произошла ошибка при выполнении команды: {e}", color=disnake.Color.red()) await self.response.send_message(embed=embed) def setup(bot: commands.Bot): bot.add_cog(Idenificator(bot))
Дополнительно:
Ответы:
сheck_db = cursor.execute('SELECT * FROM identificator WHERE token = ?', (final_number,)) |
сheck_db = cursor.execute('SELECT * FROM identificator WHERE token = ?', (final_number,))
Чему равна переменная final_number в этот момент?
check_db(final_number)
Где определена функция check_db?
- Значит я напутал что то. Задумка была в том чтобы он генерировал рандомное число до момента создания того числа, которого нет в базе. Если поможет скорректировать код, то буду вам очень признателен
- toxa_sheben,
- сheck_db = cursor.execute('SELECT * FROM identificator WHERE token = ?', (final_number,)) + def сheck_db(token): + cursor.execute('SELECT 1 FROM identificator WHERE token = ?', (token,)) + return cursor.fetchone() is not None
- сheck_db = cursor.execute('SELECT * FROM identificator WHERE token = ?', (final_number,)) + def сheck_db(token): + cursor.execute('SELECT 1 FROM identificator WHERE token = ?', (token,)) + return cursor.fetchone() is not None
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос


Для того чтобы вставить данные в таблицу через SQL команду, необходимо убедиться, что запрос правильно сформулирован и все необходимые параметры указаны.
Возможные причины, по которым вставка данных не работает, могут быть следующими:
1. Неправильно сформулированный запрос. Убедитесь, что вы используете правильный синтаксис SQL для вставки данных в таблицу. Например, запрос должен выглядеть примерно так:
INSERT INTO table_name (column1, column2, column3) VALUES (value1, value2, value3);
2. Отсутствие необходимых прав доступа к базе данных. Убедитесь, что у вас есть права на выполнение операции вставки данных в указанную таблицу.
3. Неверные данные для вставки. Проверьте, что значения, которые вы пытаетесь вставить, соответствуют типам данных и ограничениям, установленным для столбцов таблицы.
4. Ошибки в синтаксисе или опечатки. Даже одна небольшая ошибка в запросе может привести к его неработоспособности. Проверьте каждый символ и ключевое слово в вашем запросе.
Если после проверки всех вышеперечисленных причин проблема не решается, попробуйте выполнить запрос напрямую в среде управления базой данных, такой как phpMyAdmin или MySQL Workbench, чтобы увидеть более подробные сообщения об ошибках.
Надеюсь, что эти рекомендации помогут вам решить проблему с вставкой данных в таблицу через SQL команду.