#python #django #pandas #dataframe #django-models
Вопрос:
for transaction in df.itertuples():
transaction_obj = Transactions()
transaction_obj.portfolio = strategy.portfolio
transaction_obj.strategy = strategy
transaction_obj.transaction_price = transaction.TransactionPrices
transaction_obj.time_stamp = transaction[0]
transaction_obj.transaction_type = name
transaction_obj.brokerage = transaction.Brokerage
if name == Transactions.LONG:
if transaction.EntryLong:
transaction_obj.action = Transactions.BUY
if transaction.ExitLong:
transaction_obj.action = Transactions.SELL
elif name == Transactions.SHORT:
if transaction.EntryShort:
transaction_obj.action = Transactions.SELL
if transaction.ExitShort:
transaction_obj.action = Transactions.BUY
transaction_obj.save()
Код отлично работает без проблем или ошибок, однако я хочу сократить время выполнения. В настоящее время для вставки 180 строк требуется около 7 секунд. Я использую базу данных PostgreSQL.
Ответ №1:
Если ваш сценарий предполагает всегда создавать записи (не изменять), то вы можете оптимизировать время создания с помощью массового создания:
transactions = []
for transaction in df.itertuples():
transaction_obj = Transactions()
transaction_obj.portfolio = strategy.portfolio
transaction_obj.strategy = strategy
transaction_obj.transaction_price = transaction.TransactionPrices
transaction_obj.time_stamp = transaction[0]
transaction_obj.transaction_type = name
transaction_obj.brokerage = transaction.Brokerage
if name == Transactions.LONG:
if transaction.EntryLong:
transaction_obj.action = Transactions.BUY
if transaction.ExitLong:
transaction_obj.action = Transactions.SELL
elif name == Transactions.SHORT:
if transaction.EntryShort:
transaction_obj.action = Transactions.SELL
if transaction.ExitShort:
transaction_obj.action = Transactions.BUY
transactions.append(transaction_obj)
Transaction.objects.bulk_create(transactions)