Goverl
@Goverl
Мне 13 лет, и я изучаю программирование.

No such column: id почему выхдает ошибку в discord.py ,sqlite3?

Вот ошибка:

Ignoring exception in on_ready
Traceback (most recent call last):
File "C:\Users\Acer\AppData\Local\Programs\Python\Python39\lib\site-packages\discord\client.py", line 343, in _run_event
await coro(*args, **kwargs)
File "D:\Python\Bots\Discord Bots\CasinoBot\bot.py", line 29, in on_ready
if cursor.execute(f"SELECT id FROM users WHERE id = {member.id}").fetchone() is None:
sqlite3.OperationalError: no such column: id

Вот мой код:

import discord
from discord.ext import commands
from config import settings
import sqlite3

PREFIX = "."
intents = discord.Intents.all()
bot = commands.Bot(command_prefix = PREFIX, intents = intents)
bot.remove_command('help')

connection = sqlite3.connect("server.db")
cursor = connection.cursor()

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

for guild in bot.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)")

else:
pass

connection.commit()
print("Bot was connected")

@bot.event
async def on_member_join(member):
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)")
connectioh.commit()

else:
pass

#balance
@bot.command(aliases = ["balance", "cash", "bal", "баланс"])
async def __balance(ctx, member: discord.Member = None):
if meber is None:
await ctx.send(embed = discord.Embed(
description = f"""Баланс пользователя **{ctx.author}** состовляет **{sql.execute("SELECT cash FROM users WHERE id = {}".format(ctx.author.id)).fetchone()[0]} **"""))
else:
await ctx.send(embed = discord.Embed(
description = f"""Баланс пользователя **{ctx.author}** состовляет **{sql.execute("SELECT cash FROM users WHERE id = {}".format(member.id)).fetchone()[0]} **"""))

bot.run(settings["token"])
  • Вопрос задан
  • 264 просмотра
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Во-первых, оформляй код, нечитаемо же. Кнопка </>.

Во-вторых, у тебя запрос на создание таблицы имеет вид CREATE TABLE IF NOT EXISTS - то есть если таблица уже существует, этот запрос молча ничего не сделает. Обычно так и надо - но проблема в том, что если таблица существует, но имеет другой, неправильный набор столбцов, этот запрос всё равно молча ничего не сделает! Он проверяет только существование таблицы, но не её структуру.

Вот поэтому Hemul GM и просит тебя показать структуру таблицы, как она есть в базе данных. Это можно сделать парой способов, например так.
Напиши отдельный простой скрипт на питоне, который подключается к твоей базе и выполняет следующий запрос:
SELECT sql FROM sqlite_master WHERE name = 'users';

Сравни набор столбцов в этом запросе со своим запросом. Если столбцы не совпадают, значит, имеет место та ситуация, о которой я писал выше. Тогда тебе придётся или удалить таблицу(а может и всю базу) а потом создать её заново, уже как надо... или выполнить запрос ALTER TABLE, чтобы изменить набор столбцов в таблице.
Первое гораздо проще, если ты ещё только разрабатываешь бота, и в базе не хранится ценной информации.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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