2014-09-06 10 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

相關問題