Сохранение данных в базу данных в django
Я работаю над сайтом, который будет рекомендовать акции на фондовом рынке, основываясь на исторически надежных торговых стратегиях.
При запуске сервера я не вижу никаких данных, которые должны отображаться на сайте. Если заглянуть в базу данных, то окажется, что большая часть данных не сохраняется в базе данных. Есть и другая проблема, которая может быть связана с этим: При выполнении кода я получаю название компании для последней акции, которая просматривается в цикле, но для остальных там просто написано «None». Буду благодарен, если кто-нибудь сможет помочь мне с этим.
Вот код для циклического просмотра каждой акции:
def compile_queue(self):
from stock.models import Stock
list_of_stocks = Stock.objects.prefetch_related("stock_data", "strategies", "recommendations").values('ticker')[0:101]
for i in list_of_stocks.values():
try:
#Update db with new data
ticker = i.ticker
stock_object = Stock_Class(ticker)
self.list_of_operations.append(lambda i=i: stock_object.update_data(i))
# Get strategy objects
moving_average_strategy = Moving_Average_Strategy(ticker)
rsi_strategy = RSI_Strategy(ticker)
bollinger_band_strategy = Bollinger_Bands_Strategy(ticker)
# Add strategies to the queue
self.list_of_operations.append(lambda:moving_average_strategy.apply_strategy())
self.list_of_operations.append(lambda:rsi_strategy.apply_strategy())
self.list_of_operations.append(lambda:bollinger_band_strategy.apply_strategy())
self.list_of_operations.append(lambda:stock_object.set_recommendations(i))
except Exception as e:
print(f"(Trading_System.py) The required actions for {i} could not be run due to Error: {e}")
Вот часть кода, которая получает данные по заданной акции и должна сохранить их в базе данных:
def update_data(self, primary_key):
stock = yf.Ticker(self.ticker)
stock_info = stock.info
current_date_and_time = timezone.now()
try: # Updates data for Stock model
stock_model = Stock.objects.get(ticker=self.ticker)
stock_model.company_name = stock_info.get('shortName')
stock_model.sector = stock_info.get('sector')
stock_model.last_updated = current_date_and_time
stock_model.save()
except ObjectDoesNotExist:
print("(Stock.py 1) There was a problem executing getting the data or saving it to the database.")
try: # Updates data for StockData model
stock_data_model = StockData.objects.get(ticker=self.ticker)
stock_data_model.current_date = date.today()
stock_data_model.current_price = stock_info['currentPrice']
stock_data_model.last_200_close_prices = self.get_stock_close_prices()
price_change = stock_data_model.current_price - stock_data_model.last_200_close_prices[-2]
stock_data_model.price_change = price_change
stock_data_model.price_change_percent = 100*(price_change/stock_data_model.last_200_close_prices[-2])
stock_data_model.save()
except ObjectDoesNotExist:
print("(Stock.py 2) There was a problem executing getting the data or saving it to the database.")
Я проверил, что получаю правильные данные, и это не кажется проблемой. Я спрашивал об этом у ChatGPT, но у него нет ответа, который бы мне помог.
Я буду благодарен, если у кого-нибудь есть предложения, как это исправить.