我有这两种模式:
class Item(models.Model):
item_id = models.CharField(max_length=10, primary_key=True)
item_name = models.CharField(max_length=100)
description = models.CharField(max_length=500)
slug = models.CharField(max_length=200)
price = models.FloatField()
def __str__(self):
return self.item_nameclass Image(models.Model):
item = models.ForeignKey(Item, on_delete=models.CASCADE)
image_url = models.CharField(max_length=200)我有很多项目,每个项目都有一些图片分配给它。
要在数据库中添加项,我通过批量创建:
it = (Item(
item_id = item['id'],
item_name= item['title'],
description = item['description'],
slug = item['slug'],
price = item['price']['amount']
)
for item in items
)
while True:
batch = list(islice(it, batch_size))
if not batch:
break
Item.objects.bulk_create(batch, batch_size)一切都很好,好吗。但是我也想对这些图像做同样的处理,因为我有太多的图像无法单独处理。
现在我这样做:
for item in items:
for image in item['images']:
Item.objects.get(item_id = item['id']).image_set.create(image_url = image['urls']['big'])但是这在提升所有图像方面太慢了(可能需要30分钟),所以我想像使用项目一样批量上传,但是由于图像模型将项作为外键,所以我不能这样做。如何以更有效的方式上传图片?
我正在使用SQLite,我知道使用另一个数据库系统会加快进程,但是无论如何,我认为有一个更快的方法来上传所有的图像。
谢谢。
发布于 2022-03-17 14:25:53
我在使用SQLite时遇到了类似的问题,但在我的例子中,在保存对象之前我还没有生成id。有关批量创建的文档给出了提示:
如果模型的主键是AutoField,则只能在某些数据库(当前为PostgreSQL、MariaDB 10.5+和SQLite 3.35+)上检索主键属性。在其他数据库上,它将不会被设置。批量创建
我转到Postgres工作。
https://stackoverflow.com/questions/69154720
复制相似问题