Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python django访问模型需要很多时间_Python_Mysql_Django_Templates_Render - Fatal编程技术网

Python django访问模型需要很多时间

Python django访问模型需要很多时间,python,mysql,django,templates,render,Python,Mysql,Django,Templates,Render,我有一个这样的模型: class Event(models.Model): description = models.CharField(max_length=3072) severity = models.CharField(max_length=96) reception_timestamp = models.DateField() version = models.CharField(max_length=100) mail_archive_id =

我有一个这样的模型:

class Event(models.Model):
    description = models.CharField(max_length=3072)
    severity = models.CharField(max_length=96)
    reception_timestamp = models.DateField()
    version = models.CharField(max_length=100)
    mail_archive_id = models.PositiveIntegerField()
    component_id = models.CharField(max_length=32)
    technician_at_work = models.BooleanField()
    timestamp = models.DateField(db_index=True)
    system = models.ForeignKey(System)
    event_code = models.ForeignKey(EventCode)
start = time.time()
# build lazy queryset:
events = Event.objects.filter(system_id=system_id).filter(timestamp__range=[from_date, now])
# evaluate and flatten queryset:
res = [ e.timestamp, e.system.serial_number, e.version, e.event_code.code, e.description, e.severity, e.reception_timestamp for e in events ]
logging.info('query took %s', time.time()-start)
在我的views.py文件中,我尝试访问信息所在的MySql数据库

我运行了一些QuerySets操作,然后继续从模型中提取所需的信息,以将其呈现到html模板中,但提取信息花费的时间太长:

events = Event.objects.filter(system_id=system_id).filter(timestamp__range=[from_date, now])
return [ e.timestamp, e.system.serial_number, e.version, e.event_code.code, e.description, e.severity, e.reception_timestamp for e in events ]
我尝试了一些方法,比如创建一个生成器并将其发送到模板,以使用它来呈现HTML文档,但是访问信息所花费的时间是相同的

我能做什么?只需要一两分钟就能抓到270排。 我检测到查询需要几秒钟的时间,但对信息的访问占用了剩余的时间。我怎样才能提高这一点

谢谢

两点:

1) 查询集是惰性地进行评估的,因此对它们进行计时可能有点奇怪。“events=Event.objects…”行是否需要几秒钟,或者您是否对queryset plus获取数据进行了计时?后者将如下所示:

class Event(models.Model):
    description = models.CharField(max_length=3072)
    severity = models.CharField(max_length=96)
    reception_timestamp = models.DateField()
    version = models.CharField(max_length=100)
    mail_archive_id = models.PositiveIntegerField()
    component_id = models.CharField(max_length=32)
    technician_at_work = models.BooleanField()
    timestamp = models.DateField(db_index=True)
    system = models.ForeignKey(System)
    event_code = models.ForeignKey(EventCode)
start = time.time()
# build lazy queryset:
events = Event.objects.filter(system_id=system_id).filter(timestamp__range=[from_date, now])
# evaluate and flatten queryset:
res = [ e.timestamp, e.system.serial_number, e.version, e.event_code.code, e.description, e.severity, e.reception_timestamp for e in events ]
logging.info('query took %s', time.time()-start)
2) 不需要单独的for循环,您可以让QuerySet使用该方法直接输出字段。也就是说:

events = Event.objects.filter(system_id=system_id).filter(timestamp__range=[from_date, now])
event_vals = events.values_list('timestamp', 'system.serial_number') # more here
return event_vals

第一行构建了一个惰性查询集,描述您需要什么样的数据。第二行要求Django只提供一个元组列表。它为您重新排序并展平数据,可能比显式地将所有行转换为模型,然后使用单独的循环提取数据更快。

但是值列表函数不获取外键值,是吗?比如'system.serial\u number',以便访问'system'属性,然后查找'serial\u number'值。我找到了!用双下划线代替圆点谢谢!