Ввод значений в каждую строку sqlite3 python

Рейтинг: 0Ответов: 1Опубликовано: 13.01.2023

я вношу в поле date дату в формате YYYYMMDD далее с помощью datetime вычислю разницу в днях, и хочу записать эту разницу в днях в столбец days, но во все строки записывается только одно значение. Например в базе две строки с датой, разница выводится следующая введите сюда описание изображения, но в обе строки в колонке days записывается 112, а не 57 в первую и 112 во вторую. Как сделать, чтобы в каждую строку записывалось свое значение?

import sys, sqlite3, os, time
from datetime import datetime

# Создание базы
try:
    sqlite_connection = sqlite3.connect('my_fin.db')
    create_table = '''CREATE TABLE IF NOT EXISTS my_table (
                                id INTEGER  PRIMARY KEY AUTOINCREMENT NOT NULL,
                                name TEXT,
                                summ INTEGER,
                                date TEXT,
                                percent INTEGER,
                                summ_percent INTEGER GENERATED ALWAYS AS ((summ*percent)/100) VIRTUAL,
                                days INTEGER,
                                con_summ INTEGER GENERATED ALWAYS AS (summ + summ_percent) VIRTUAL);'''

    cursor = sqlite_connection.cursor()
    cursor.execute(create_table)
    sqlite_connection.commit()
    cursor.close()

except sqlite3.Error as error:
    print("Ошибка при подключении к sqlite", error)
finally:
    if (sqlite_connection):
        print("Подключение к базе успешно")
        sqlite_connection.close() 
def days():
    sqlite_connection = sqlite3.connect('my_fin.db', detect_types=sqlite3.PARSE_DECLTYPES)
    cursor = sqlite_connection.cursor()
    sqlite_connection.row_factory = sqlite3.Row
    cursor.execute("SELECT date FROM my_table")
    q = cursor.fetchall()
    for qq in q:
        qq=''.join(qq)
        dt1 = datetime.now()
        dt2 = datetime(year=int(qq[0:4]), month=int(qq[4:6]), day=int(qq[6:8]))
        dt3 = dt2 - dt1
        dt3 = int(dt3.days)
        print(dt3)
        ds = ('''UPDATE my_table SET days = (?);''')
        cursor.execute(ds, (dt3,))
        sqlite_connection.commit()

Ответы

▲ 0Принят

Насколько я понял, здесь необходимо отобрать WHERE date = именно ту запись, дата из которой обрабатывается в конкретной итерации цикла. Попробуйте так:

ds = "UPDATE my_table SET days = (?) WHERE date = (?);"
cursor.execute(ds, (dt3,qq))