drake2
@drake2
Back end developer

Как данные из одной таблицы sqlite3 передавать в другую?

Я создал функцию которая спрашивает у пользователя какую криптовалюту он купил, все ответы правильно передаются в таблицу. В эту таблицу добавляется данные о операции пользователя (какой токен взял, в каком объеме и по какой цене, стоимость определяется автоматически и дата). Но я еще хочу добавить отдельную таблицу где будут подсчитываться общее количество того или иного токена и его стоимость, отличие от первой таблицы то, что токен не может повторятся а лишь обновлять внутри себя данные(объем и стоимость)

import sqlite3
import datetime


with sqlite3.connect("crypto.db") as db:

	cursor = db.cursor()
	joining_date = datetime.datetime.now()

	cursor.execute("""CREATE TABLE IF NOT EXISTS history(
		crypto TEXT,
		how_m TEXT,
		price TEXT,
		cost TEXT,
		joiningDate timestamp
	); 

	CREATE TABLE IF NOT EXISTS coins (
		coin TEXT PRIMARY KEY
		value TEXT
		price TEXT

	)
	""")

def add_crypto(): 
	global crypto_name
	crypto_name = input("Select which crypto you want to add to your wallet: ")
	how_much = float(input("how much is your contribution:  "))
	price_buy = float(input("At what price did you buy: "))
	cost = how_much * price_buy

	data_turple = (crypto_name, how_much,price_buy, cost,joining_date)
	sqlite_insert_param = "INSERT INTO history('crypto', 'how_m', 'price','cost', 'joiningDate') VALUES(?,?,?,?,?)"
	
	cursor.execute(sqlite_insert_param, data_turple)
	db.commit()
	print("Криптовалюта успешно добавлена! ")

add_crypto()
  • Вопрос задан
  • 793 просмотра
Пригласить эксперта
Ответы на вопрос 2
@rPman
существует sql запрос insert or replace, который обновляет запись в указанной таблице по условию, но если условие выдает пустой список - создает запись

Но я настоятельно рекомендую для упрощения кода исключить ситуацию, когда в обновляемой таблице нет нужных записей, в момент, когда в твоей базе появляется поддержка нового токена, добавлять в эту таблицу запись о нем с нулевым объемом. В этом случае хватит простого update mytable set amount=amount+? where cryptoname=?

И еще, настоятельно рекомендую, для финансовых приложений, сохранять в виде записей в таблице любые операции над балансами, как машиночитаемый лог, сохранит тебе нервы и деньги в будущем
Ответ написан
Комментировать
AlexNest
@AlexNest Куратор тега Python
Работаю с Python/Django
Извините конечно, но текущая реализация - чудовищная. Как минимум хранить числовые значения в виде текста - максимально неверный подход (для количества integer, для денежных значений - decimal)
Чуть более верная структура*:

Coin:
  • Coin_id:int PK
  • Name:char

User:
  • User_id:int PK
  • ...

Flow:
  • Id:int PK
  • Date:datetime
  • Amoung:int
  • Price:decimal
  • Coin_id:int FK->Coin
  • User_id:int FK->User

Как считать? Делаете выборку по ключу монеты с применением sum() к Flow.amoung.
* - в зависимости от подробного, ТЗ реализация может отличаться. Здесь лишь приведена абстрактная схема, составленная по вашему общему описанию и с учётом минимальных норм нормализации.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы