Архивирование записей и повторная вставка новых записей в Django?
У меня есть таблица Stock
и таблица StockArchive
.
Моя таблица Stock
состоит примерно из 10000 акций, которые я обновляю ежедневно. Причина, по которой у меня есть таблица StockArchive
, заключается в том, что я все еще хочу получить некоторые исторические данные, а не просто обновлять существующие записи. Мой вопрос в том, правильно ли я поступаю?
Сначала мои модели:
class Stock(models.Model):
objects = BulkUpdateOrCreateQuerySet.as_manager()
stock = models.CharField(max_length=200)
ticker = models.CharField(max_length=200)
exchange = models.ForeignKey(Exchange, on_delete=models.DO_NOTHING)
eod_price = models.DecimalField(max_digits=12, decimal_places=4)
currency = models.CharField(max_length=20, blank=True, null=True)
last_modified = models.DateTimeField(blank=True, null=True)
class Meta:
db_table = "stock"
class StockArchive(models.Model):
objects = BulkUpdateOrCreateQuerySet.as_manager()
stock = models.ForeignKey(Stock, on_delete=models.DO_NOTHING)
eod_price = models.DecimalField(max_digits=12, decimal_places=4)
archive_date = models.DateField()
class Meta:
db_table = "stock_archive"
Я продолжаю делать следующее:
@transaction.atomic
def my_func():
archive_stocks = []
batch_size = 100
old_stocks = Stock.objects.all()
for stock in old_stocks:
archive_stocks.append(
StockArchive(
stock=stock.stock,
eod_price = stock.eod_price,
archive_date = date.today(),
)
)
# insert into stock archive table
StockArchive.objects.bulk_create(archive_stocks, batch_size)
# delete stock table
Stock.objects.all().delete()
# proceed to bulk_insert new stocks
Я также обернул функцию символом @transaction.atomic
, чтобы убедиться, что фиксируются все транзакции, а не только одна из них.
Правилен ли мой ход мыслей, или я должен сделать что-то по-другому? Возможно, более эффективно?