gpt4 book ai didi

python-3.x - 如何在 Django 中批量创建或更新

转载 作者:行者123 更新时间:2023-12-03 08:19:29 30 4
gpt4 key购买 nike

我必须每 1 小时处理一个项目报告 CSV 文件。 CSV 包含 1 个帐户的 15 万多条记录,并且我的系统中有多个帐户。我之前在 Rails 上工作,并且有事件记录 gem 可以非常有效地处理这个用例。我正在 Django 中寻找此 gem 的替代方案或任何有助于批量导入如此大数据的内置方法。

到目前为止我已经尝试过这段代码。

class ItemReportService:

def call(self, file_url):
with open(file_url, 'r') as file:
reader = csv.DictReader(file)
products = []
for row in reader:
product = self.process_product(row)
products.append(product)

self.update_products(products)

def process_product(self, row):
print(f'Processing sku: {row["SKU"]}')
product = Product.objects.filter(
sku=row['SKU']).first() or Product(sku=row['SKU'])
product.listing_title = row['Product Name']
product.listed_price = row['Price']
product.buy_box_price = row['Buy Box Item Price'] + \
row['Buy Box Shipping Price']
product.status = row['Lifecycle Status']
return product

def update_products(self, products):
Product.objects.bulk_update(
products,
[
'listing_title',
'listed_price',
'buy_box_price',
'Lifecycle Status'
]
)

它引发此异常,因为当有新产品时,它没有分配主键

ValueError: All bulk_update() objects must have a primary key set.

最佳答案

Django 4.1 为bulk_create 添加了新参数(update_conflicts=bool 和 update_fields=[])

如果你的模型有一个 UNIQUE 字段,通常 Django 在创建新数据时会忽略它。但如果将 update_conflicts 参数设置为 True,则 update_fields 内的字段将被更新。

关于python-3.x - 如何在 Django 中批量创建或更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68314183/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com