python - 如何在 Django 模型中插入许多(+200)行数据框时提高效率?
问题描述
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 数据库。
解决方案
如果您的脚本假设始终创建记录(而不是修改),那么您可以使用Bulk create优化创建时间:
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)
推荐阅读
- html - 按钮上的背景图像不显示
- python - 在两个单独的 Heroku 应用程序上代理从 React 前端到 Flask 后端的 API 请求
- python - Atom 在 macOS 上将 Python 2.7 优先于 Python 3.7
- pervasive - Pervasive Database 有调度程序吗?
- google-cloud-speech - google-cloud-speech - 如何向 Google 提供法语成绩单的反馈
- mysql - 如何按顺序执行一系列 SQL 命令?
- python - 用自己的方法诅咒菜单模块
- java - 在对象内添加字符串数组
- excel - 如何在 Excel 中使用 VBA 刷新和保存/打印到 PDF?
- php - 如果 file_get_contents 返回“HTTP 请求失败!HTTP/1.1 403”是什么意思?