• Как сделать таблицу через sqlite 3?

    @serhiops
    Python/JavaScript/C++
    Ошибка тут (и даже не одна):
    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)")
            db.commit()
        else:
            pass

    1. В sqlite можно добавлять только примитивные типы данных : int, str, bool, etc.. А ты пытаешься положить туда экземпляр класса:
    cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 0, 0, 1)")
    Ты не можешь положить member, обратись к его атрибутам, как ты это сделал с member.id
    2. Я хз где большинство людей смотрят гайды по sqlite, ибо подобные вопросы возникают очень часто, а ошибки одни и теже (возьму тот-же пример):
    cursor.execute(f"INSERT INTO users VALUES ('{member}', {member.id}, 0, 0, 1)")
    при помощи f-строки или других способов конкатинации строк нельзя строить sqlite-запросы. Вы ,как минимум, не защищаете себя от sql-иньекций. Правильный вариант:
    cursor.execute("INSERT INTO users VALUES (?,?,?,?,?)", (member.atribute,member.id,0, 0, 1 ))
    3. Такие вопросы задаются очень часто, вот последниц, на который я давал ответ 2 дня назад:
    link
    4. Саму функцию вы тоже странно написали, зачем блок else?
    @client.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)")
            db.commit()
    Этого должно хватить
    Ответ написан