cur.execute(f"""SELECT id_(
CASE
WHEN id_ > 0 THEN UPDATE Home_work SET {For_lesons[Iug]} = '{CVB}'
ELSE INSERT INTO Home_work(Алгебра, Геометрия, Физ_ра, Укр_м, Укр_літ, Русск_яз, Русск_лит, Изо, Нем_яз, География, Англ_яз, Биология, Информатика, Физика, Основы_здоровья, Химия, Музыка, Ист_укр, Всем_ист, Труды_для_м, Труды_для_д) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?), {G})
END,
FROM Home_work)""")
INSERT INTO Home_work (Алгебра, .... ) VALUES(?, ....) ON CONFLICT(id) DO UPDATE
SET Алгебра = excluded.Алгебра,
Геометрия = excluded.Геометрия,
...
И как я запишу список для того что бы появились записи в столбцах?
G - список с кортежем в котором содержится другой список с записанным уроком в определённом месте.
For_lessons = ['алгебра', 'геометрия']
For_lessons_bind = ','.join('?'*len(For_lessons)) # формируем строку подстановок значений
CVB = '5,3'
data = CVB.split(',')
c.execute(f"insert into home_work ({','.join(For_lessons)}) values({For_lessons_bind})", data)
записывается в таблицу 'Музыка'
id_ - Это количество строк, всё остальное это уроки в которые записывается дз.
For_lessons = ['алгебра', 'геометрия'] # прописать все свои поля
For_lessons_bind = ','.join('?'*len(For_lessons)) # формируем строку подстановок для данных
CVB = '5,3' # это та самая строка данных по предметам
data = CVB.split(',')
# формируем список обновления полей по предметам
For_lessons_update = ','.join(f"{lesson} = excluded.{lesson}" for lesson in For_lessons)
# и запрос на вставку. пытается вставить с id_=1, если уже есть, то обновляет данные (update)
c.execute(f"insert into Home_work (id_, {','.join(For_lessons)}) values(?, {For_lessons_bind}) on conflict(id_) do update set {For_lessons_update}", [1]+data)