Задать вопрос
  • Данные из кода Python не сохраняются в Sqlite3?

    @Dj3ck Автор вопроса
    Крч упростил код исправил пару данных и он мне заполнил БД записями но причину точную так и не выяснил =_=
    Вот исправленный-упрощенный код.
    import discord
    from discord.ext import commands
    import sqlite3
    import os
    
    print(os.getcwd())
    
    settings = {
        'token': '',
        'bot': '',
        'id': '',
        'prefix': '+'
    }
    
    intents = discord.Intents.default()
    intents.members = True
    bot = commands.Bot(command_prefix=settings['prefix'], intents=intents)
    
    # Подключение к базе данных
    conn = sqlite3.connect('discord_users.db')
    c = conn.cursor()
    
    # Создание таблицы пользователей, если ее нет
    c.execute('''CREATE TABLE IF NOT EXISTS users
                 (id TEXT, name TEXT)''')
    
    # Обработчик события "Бот готов"
    @bot.event
    async def on_ready():
        print(f'{bot.user.name} has connected to Discord!')
        print(f'Pong! Latency: {round(bot.latency * 1000)}ms')
        await add_all_users()
    
    # Функция для добавления всех пользователей в базу данных
    async def add_all_users():
        await bot.wait_until_ready()
        members = [m for g in bot.guilds for m in g.members]
        for member in members:
            add_user(member.id, member.display_name)
        conn.commit()
    
    # Функция для добавления пользователя в базу данных
    def add_user(member_id, member_name):
        try:
            c.execute('SELECT * FROM users WHERE id = ?', (int(member_id),))
            user = c.fetchone()
            if user:
                c.execute('''UPDATE users SET 
                                name = ?
                                WHERE id = ?''', (member_name, member_id))
                if c.rowcount > 0:
                    print(f'{c.rowcount} строк было обновлено.')
                else:
                    print(f'Строки для обновления не найдены.')
            else:
                c.execute('INSERT INTO users VALUES (?, ?)',
                          (member_id, member_name))
        except sqlite3.Error as e:
            print(f'Ошибка при работе c базой данных: {e}')
    
    # Команда для вывода списка ID и ников пользователей на сервере
    @bot.command()
    async def list_users(ctx):
        guild = ctx.guild
        members = [(member.id, member.display_name) for member in guild.members if not member.bot]
        await ctx.send(f'Список пользователей на сервере: {members}')
    
    # Запуск бота
    if __name__ == '__main__':
        bot.run(settings['token'])
        conn.close()
  • Данные из кода Python не сохраняются в Sqlite3?

    @Dj3ck Автор вопроса
    mayton2019,
    async def add_all_users():
        await bot.wait_until_ready()
        members = [m for g in bot.guilds for m in g.members]
        for member in members:
            add_user(member.id)
    
        conn.commit()


    Про auto-commit ,ещё не встречал такую функцию . Про update Нечего не обновилось ,у меня вообще данные не появляются в БД ,есть столбцы а данных по операциям нет .
  • Данные из кода Python не сохраняются в Sqlite3?

    @Dj3ck Автор вопроса
    Модератор, Я много и не ставил, они все связанны с тематикой вопроса . Но спасибо за ссылки .Буду учитывать в дальнейшем .