• Как последовательно получить данные из бд?

    jerwright
    @jerwright
    while True: coding()
    Если я понял всё правильно, должно помочь:
    db = sqlite3.connect('base.db') # подключаю бд
    cur = db.cursor()
    
    
    def add():
        for row in cur.execute('SELECT * FROM users'):
            Name = row['Name']
            Balance = row['Balance']
            WeekSalary = row['WeekSalary']
            summa = Balance+WeekSalary
            cur.execute("UPDATE users SET Balance = {} WHERE Name = {}".format(summa, Name))
            db.commit()
    Ответ написан
    Комментировать
  • Как приконектиться к базе 1 раз?

    nullnull
    @nullnull
    Из-за того, что параметр называется также, как глобальная переменная, вот и не работает.
    Примерно должно быть так:

    UPD: исправлен пример, спасибо MinTnt за внимательность
    import sqlite3
    
    db = sqlite3.connect('base.db')
    cursor = db.cursor()
    
    def  add():
        a = 1
        cursor.execute('INSERT INTO base(number) VALUES("{}")'.format(a))
    
    def change():
        pass
    
    add()


    А ещё лучше в if-name-main стиле:
    https://ru.stackoverflow.com/questions/515852/
    import sqlite3
    
    def  add(cursor):
        a = 1
        cursor.execute('INSERT INTO base(number) VALUES("{}")'.format(a))
    
    def change(cursor):
        pass
    
    if __name__ == "__main__":
        db = sqlite3.connect('base.db')
        cursor = db.cursor()
        add(cursor)
    Ответ написан
  • Можно использовать sqlite3 в асинхронном боте?

    SoreMix
    @SoreMix Куратор тега Python
    yellow
    Правда, она однопоточная, и при попытке получить доступ с нескольких потоков выкинет ошибку о блокировке. Пока один поток обрабатывает данные - дб лочится. В принципе, сравнимо с попыткой открыть один файл два раза.

    Лучше использовать полноценную базу данных как postgres, например. В ней и полей больше, и поддерживается доступ с нескольких потоков. sqlite3 это поиграться и для тестов, по сути это простое key-value хранилище с самыми примитивными данными: int, real, blob, text, как БД в словаре в .json файле.
    Ответ написан
    2 комментария
  • Как вытащить значение из бд по 2 элементу?

    @rPman
    sql базы данных определяют массив - как таблицу т.е. нужен массив - делай связанную таблицу
    table (id,member)
    dates (table_id, date)
    с созданным foreign key индексом dates.table_id -> table.id

    соответственно когда запрашиваешь данные из table, то объединяй их с dates с помощью join (в зависимости от задачи left/right/inner join)

    select distinct table.id, table.member from table left join dates on table.id-dates.table_id where dates.date=18
    вернет одну записи из table если у них есть связанные dates со значением 18
    distinct убирает дубликаты (так как left join выдает умножение таблиц, дублируя данные table для каждой новой записи dates)

    p.s. когда то давно, там где говнокодить можно, я хранил массивы, сериализовав их тексте через разделитель ';', добавив его даже для первого элемента (т.е. ';18;19'), тогда запросив select * from table where dates like '%;18%' можно получить то что тебе нужно, но это очень неэффективно
    Ответ написан
    Комментировать
  • Как вытащить значение из бд по 2 элементу?

    @mshuribitov
    А зачем 10 если нужно вывести 18? И если вы записали 10,18 то значение такое и будет, или же попробуйте использовать функцию .split в переменную и вывести нужные индексы.
    Ответ написан
    4 комментария
  • Как вытащить значение из бд по 2 элементу?

    Sqlite не имеет такого типа как массив, поэтому и запросить по определённому элементу массива нельзя. Поэтому вариантов два - не использовать sqlite или хранить даты в отдельной таблице, связанной через внешний ключ с текущей
    Ответ написан
    Комментировать