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 их или выполняет запрос только для каждого вызова?
Вы пытаетесь понять ORM Django, или хотите реплицировать его на PHP? Если это последнее, вы посмотрели на PHP ORM, например Doctrine? –
Здесь есть некоторые полезные сведения: https://docs.djangoproject.com/en/dev/topics/db/queries/. Кстати, я думаю, что FLOW3 имеет ORM. – Jingo
Не уверен во всем управлении памятью за кулисами, но что касается вашего второго вопроса, Django только делает вызов в базу данных, когда объекты используются, как в цикле. Вы можете ввести 'p = Person.objects.all()' then 'p.filter (name =" Paul ")', и до сих пор Django не попал в базу данных. Когда вы используете QuerySet, 'для p1 в p: ...' он, наконец, попадает в базу данных и получает записи для заполнения объекта QuerySet. – Furbeenator