Добавление новой записи в бд - удаляет старые записи
У меня в базе данных 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)