2014-09-06 34 views
3

这么多慢我的代码如下两个部分:为什么Django的ORM比原始的SQL

首先,在SQL:

self.cursor.execute('SELECT apple_id FROM main_catalog WHERE apple_id=%s', apple_id) 
if self.cursor.fetchone(): 
    print '##' 

接下来,在Django:

if Catalog.objects.filter(apple_id=apple_id).exists(): 
    print '>>>' 

这样做的第一种方式比100k条目循环中的第二种方式快4倍。 Django速度如此之慢的原因是什么?

回答

6

通常,ORM会遇到为每行实例化完整对象并返回它的麻烦。你的原始SQL没有这样做,所以它不会承担那种惩罚。对于您不打算使用该对象的大型结果集,最好绕过ORM。

+1

ORM是“对象 - 关系映射”的首字母缩写。对每一行实例化一个完整的对象可能是“麻烦”,但这是作为一个ORM的本质,另一个提问者进行了一些测试,并确定Django 1.8+在性能上有了比原始SQL方式更大的改进做事。 – Bobort 2016-10-10 18:22:59