1
我試圖重現類似Djangos的模型在PHP中的類。我想知道django如何處理模型表中的加載和保存條目。django如何處理從數據庫中獲取數據?
例如,調用Person.objects.all()
(Person
是當然的django.db.models.Model
子類)的情況下,我期望的Django執行SQL查詢,SELECT * FROM myapp_person
,例如,然後從查詢收到的數據變換到模型 - 的實例類。它是否正確?然後,
- 不能導致內存溢出時,有太多的條目,或有沒有辦法Django處理這種副作用?
- 當調用
Person.objects.filter(name="Paul")
我希望Django執行一個SQL查詢如SELECT * FROM myapp_person WHERE name = 'Paul'
,但如果之前調用了Person.objects.all()
? django緩存它們還是隻是爲每個調用執行請求?
您是想了解Django的ORM,還是想在PHP中複製它?如果這是後者,你看過PHP ORM如Doctrine嗎? – 2012-03-06 21:50:55
這裏有一些很好的見解https://docs.djangoproject.com/en/dev/topics/db/queries/。順便說一句我認爲FLOW3也有一個ORM。 – Jingo 2012-03-06 21:52:53
不知道幕後的所有內存管理,但至於第二個問題,Django只在使用對象時才調用數據庫,就像在循環中一樣。你可以輸入'p = Person.objects.all()',然後輸入p.filter(name =「Paul」)',而且Django還沒有打到數據庫。一旦你使用了QuerySet,'對於p:...中的p1',它最終命中數據庫並獲取記錄來填充QuerySet對象。 – Furbeenator 2012-03-07 00:16:27