Ответы пользователя по тегу SQLite
  • Как очистить sqlite?

    @o5a
    База и таблица это разные вещи.
    Чтобы очистить таблицу как раз указанная команда delete и подойдет. Только не забыть после этого сделать commit.
    Ответ написан
  • Как правильно сформировать sql запрос для корректного вывода id?

    @o5a
    Так Вы всегда только первую строку и выбираете своим fetchone
    one_result = cursor.fetchone()
    Поэтому там только id 1.

    И вообще не нужно вручную поле id проставлять, если оно объявлено INTEGER PRIMARY KEY, то будет увеличиваться автоматически.
    https://sqlite.org/autoinc.html
    Ответ написан
    Комментировать
  • Как сделать замену для всех в SQLITE?

    @o5a
    для установки значения нужно его и указывать безо всяких фигурных скобок
    sql.execute('UPDATE users SET use_comand = 0')
    Ответ написан
  • Как подсчитать все мои элементы в sql?

    @o5a
    Если в этой таблице заказов товар повторяется и задача в том, чтобы суммировать итог по товару, то это может делать сам SQL.
    Допустим, таблица orders с полями
    "item" - товар
    "quantity" - кол-во
    "amount" - сумма по этой позиции
    То запрос будет выглядеть примерно так
    SELECT item, SUM(quantity), SUM(amount) FROM orders GROUP BY item

    Он выведет суммарное кол-во и стоимость по каждому отдельному товару.
    Ответ написан
  • Почему у меня переменная pe не изменяеться а записываеть только первый id пользователя?

    @o5a
    SQL запрос без явной сортировки, вроде этого 'SELECT * FROM users_id', не гарантирует упорядоченность результатов (user_id 1 может идти не первым), так что пытаться по нему определять какие-то упорядоченные id неправильно. Да и в целом не особо понятно без пояснений, что предполагалось сделать всеми этими манипуляциями наподобие
    peremenna_user_id = peremenna_user_id + str(pe[1])

    Если цель - выбрать пользователя по id, то нужно не городить перебор всех значений, а использовать синтаксис SQL, примерно так
    cursor.execute('SELECT * FROM users_id WHERE user_id = ?', (user_id, ))

    Если такого user_id нет в базе пользователей, то cursor.fetchone() вернет None.

    У Вас в целом совершенно неправильный подход к использованию SQL базы данных. Почитайте хотя бы основы SQL. Не должно быть никаких отдельных таблиц под каждого пользователя. Таблицы создаются под сущности (например, пользователь, склад, продукт), id пользователя прописываются в полях.
    Ответ написан
  • Как решить проблему с выводом в sqlite3?

    @o5a
    Судя по всему поле в таблице было создано как DATE, а не TIMESTAMP, поэтому при выгрузке оно пытается преобразовать к типу DATE без времени.

    Можно или использовать правильный тип поля изначально, или явно указать тип в запросе
    select time_to_next_pay as "time_to_next_pay [timestamp]" from vip_users
    Ответ написан
    Комментировать
  • Почему обновляется только первое значение таблицы?

    @o5a
    Не могу сказать наверняка, не зная, откуда берется переменная y, но в самом update получается следующее.
    Первым в списке полей, возвращаемом table_info очевидно идет поле ID. Первой же операцией update это поле сбрасывается в 0, т.к получается конструкция
    UPDATE userResource SET ID = 0 WHERE ID = твой_ID
    Из-за этого последующие апдейты других полей не срабатывают, т.к. записи с ID = твой_ID уже нет, ты ее затёр нулем.
    Можно добавить проверку по имени поля, чтобы такого не случалось, наподобие

    if i[1] != 'ID':
        cursor.execute('UPDATE ...


    И выборку из pragma лучше все же сделать как и обычную, через fetchall
    for i in cursor.execute(f"PRAGMA table_info(userResource)").fetchall():
    Ответ написан
  • Проблема в архитектуре бд sqlite, что не так?

    @o5a
    Ошибку выдает потому, что запрос на вставку gender ('insert or ignore') пытается использовать ключи, а в таблице они не заданы.
    Например, так

    CREATE TABLE IF NOT EXISTS gender(gender text primary key)


    В остальном по структуре. Если все же делаете реляционную модель, то в таблице студентов должны храниться id из этих справочных таблиц (groupp, teacher и т.д.), а не сами значения. Тогда это позволит поддерживать уникальность значений, позволять использовать выбор значений из справочников (которыми и будут эти таблицы gender, teacher и т.д.).

    Пример, для учителя не просто таблица с teacher text, а таблица с ключевым полем, которое и используется для связки с таблицей студентов и остальными редактируемыми полями.

    CREATE TABLE IF NOT EXISTS teacher(
                teacher integer primary key,
                teacher_name text)


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

    Если же полноценная реляционная модель не нужна, то нет и смысла делать отдельную таблицу под каждую сущность (они по факту не будут использоваться), можно все хранить напрямую в таблице студентов.
    Ответ написан
    1 комментарий
  • Как сравнить данные из таблицы с нулем?

    @o5a
    Вместо
    for i in cursor.execute("SELECT Wreason FROM users WHERE id = {}".format(member.id)).fetchone():
          if i == 0:
            print('4')
            cursor.execute("UPDATE users SET warns = warns + {1} WHERE id = {}".format(member.id))
            cursor.execute("UPDATE users SET Wreason = Wreason + {} WHERE id = {}".format(arg, member.id))


    Использовать напрямую синтаксис SQL
    cursor.execute("UPDATE users SET warns = warns + 1, Wreason = {} WHERE id = {} AND Wreason = 0".format(arg, member.id))

    Обновит таблицу users по данному пользователю (увеличит счетчик предупреждений на 1, проставит новую причину предупреждения), если до этого Wreason = 0.
    Ответ написан
    1 комментарий
  • При выборе данных в sqlite3 и при fetchone выходит None хотя в db браузере всё хорошо?

    @o5a
    Проблема здесь
    if sql.fetchone() is not None:
        pref = sql.fetchone()

    вызов fetchone() полностью выбирает данные из курсора, в результате последующий вызов fetchone() возвращает null

    Нужно сделать fetch в переменную, которую уже потом использовать:
    pref = sql.fetchone()
    if pref is not None:
        # использовать уже pref напрямую, а не sql.fetchone()


    P.S. хотя я наверное не совсем понял проблему, похоже изначально данные даже не выбираются, так что проблема еще в чем-то. Но даже после этого, указанное выше надо исправить, иначе тоже данные не выдаст (но уже по указанной причине).
    Ответ написан
    2 комментария
  • Что надо сделать что бы Sqlite UPDATE заработал?

    @o5a
    В исполнении UPDATE user_info в параметрах используется name[0], а должно быть просто name.
    Ответ написан
    Комментировать