Добавление новой записи в бд - удаляет старые записи

У меня в базе данных Sqlite3 есть поле ввиде списка с данными: {"0": {"id": "0", "seller": "", "buyer": "", "price": "0", "timebuy": "", "timeconfirm": "", "status": ""}}. моя проблема в том что когда пользователь нажимает на call cashback, то в поле history не добавляет новую запись а перезаписывает все старые, никак не могу понять как это можно исправить

        elif "cashback:" in call.data[:9]:
        idsdelka = str(call.data.split(":")[1])

        sdelka = json.loads(send_info(0, "sdelka"))

        sdelka[idsdelka]["status"] = "moneyback"

        current_date = datetime.now()
        timeconfirm = current_date.strftime("%d:%m:%Y")

        sdelka[idsdelka]["timeconfirm"] = timeconfirm

        # Загрузка текущей истории сделок
        history_dict = json.loads(send_info(0, 'history'))

        # Определение новой записи в истории сделок
        new_history_entry = {
            "id": idsdelka,
            "seller": sdelka[idsdelka]["seller"],
            "buyer": sdelka[idsdelka]["buyer"],
            "price": sdelka[idsdelka]["price"],
            "timebuy": sdelka[idsdelka]["timebuy"],
            "timeconfirm": timeconfirm,
            "status": "Возврат средств"
        }

        # Получение или инициализация списка истории для данного пользователя
        user_id = str(call.message.chat.id)
        if user_id in history_dict:
            history_list = history_dict[user_id]
        else:
            history_dict[user_id] = []
            history_list = history_dict[user_id]

        # Добавление новой записи к истории сделок для данного пользователя
        history_list.append(new_history_entry)

        # Сохранение обновленной истории сделок
        changeinfo(sdelka[idsdelka]['seller'], "history", json.dumps(history_dict))
        changeinfo(sdelka[idsdelka]['buyer'], "history", json.dumps(history_dict))

        changeinfo(0, "sdelka", json.dumps(sdelka))

        # Обновление баланса покупателя
        new_balance = int(send_info(sdelka[idsdelka]["buyer"], "balance")) + int(sdelka[idsdelka]["price"] * 1.05)
        changeinfo(sdelka[idsdelka]["buyer"], "balance", new_balance)

        # Отправка сообщений об успешном возврате средств
        bot.edit_message_text(chat_id=call.message.chat.id, message_id=call.message.message_id,
                              text=f"✅ Вы успешно вернули деньги покупателю со сделки #{idsdelka}")

        bot.send_message(int(sdelka[idsdelka]["buyer"]),
                         f"? Продавец {call.message.chat.id} вернул вам {int(sdelka[idsdelka]['price'] * 1.05)}₽ со сделки #{idsdelka}")

Функции changeinfo и send_info

def changeinfo(id: str, name, info):
connection = get_db_connection()
with connection:
    c = connection.cursor()
    c.execute(f"UPDATE people SET {name} = ? WHERE id = ?", (info, id))
    connection.commit()

def send_info(id: str, info):
    connection = get_db_connection()
    with connection:
        c = connection.cursor()
        c.execute(f"SELECT {info} FROM people WHERE id = ?", (id,))
        result = c.fetchone()
        return result[0]

Ответы (1 шт):

Автор решения: Андрей Васильев

UPDATE используется для обновления записей,а INSERT для создание новых записей


Вот пример:

values = [login, password, name, birthday]        
cursor.execute("INSERT INTO users(id_user, password, name, birthday) VALUES(?,?,?,?)", values)
       
→ Ссылка