gpt4 book ai didi

Django fixture 加载很慢

转载 作者:行者123 更新时间:2023-11-29 14:00:48 24 4
gpt4 key购买 nike

我正在尝试使用 2 套固定装置提供初始数据。第一个夹具格式如下所示。

  {
"pk": 1,
"model": "data.Person",
"fields": {
"full": "Anna-Varney",
"num": "I",
"short": "Anna-Varney"
}
},

我首先加载它,它在大约 1-2 小时内加载正常。我的 movie.json 格式如下所示:

  {
"pk": 1,
"model": "data.Film",
"fields": {
"date": "2005-08-01",
"rating": 8.3,
"actors": [
[
"Anna-Varney"
]
],
"name": "Like a Corpse Standing in Desperation (2005) (V)"
}
},

并且加载电影固定装置花费了非常长的时间,目前已经 20 小时了,我的电脑在运行时很慢。我在 2 个月前加载了类似的固定装置,除了我使用 MySQL(我现在使用 Postgres)并且我已经在我的模型中添加了日期字段。过去将电影夹具加载到我的旧 MySQL 数据库中时,只需要 2-3 个小时。有没有办法确定夹具加载部分在哪一步或是否已卡住?

作为引用,我的模型是:

class PersonManager(models.Manager):
def get_by_natural_key(self, full):
return self.get(full=full)

class Person(models.Model):
objects = PersonManager()
full = models.CharField(max_length=100,unique = True)
short = models.CharField(max_length=100)
num = models.CharField(max_length=5)
def natural_key(self):
return (self.full,)

def __unicode__(self):
return self.full


class Film(models.Model):
name = models.TextField()
date = models.DateField()
rating = models.DecimalField(max_digits=3 , decimal_places=1)
actors = models.ManyToManyField('Person')

def __unicode__(self):
return self.name

最佳答案

在大多数情况下,您可以通过以编程方式加载转储数据并使用 bulk_create

来大大加快速度

例子:

from collections import defaultdict
from django.core import serializers

obj_dict = defaultdict(list)
deserialized = serializers.deserialize('json', open('my_fixtures.json'))
# organize by model class
for item in deserialized:
obj = item.object
obj_dict[obj.__class__].append(obj)

for cls, objs in obj_dict.items():
cls.objects.bulk_create(objs)

关于Django fixture 加载很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19306807/

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