Php django如何处理从数据库获取数据的问题?

Php django如何处理从数据库获取数据的问题?,php,django,model,implementation,Php,Django,Model,Implementation,我试图在PHP中复制类似于Djangos的模型类的东西。我想知道django如何处理从模型表加载和保存条目 例如,当调用Person.objects.all()(Person当然是django.db.models.Model的子类)时,我希望django执行一个SQL查询,SELECT*FROM myapp\u Person,例如,然后将从查询接收的数据转换为模型类的实例。这是正确的吗?那么 当条目太多时,这是否会导致内存溢出,或者Django是否有办法处理这种副作用 调用Person.obje

我试图在PHP中复制类似于Djangos的模型类的东西。我想知道django如何处理从模型表加载和保存条目

例如,当调用
Person.objects.all()
Person
当然是
django.db.models.Model
的子类)时,我希望django执行一个SQL查询,
SELECT*FROM myapp\u Person
,例如,然后将从查询接收的数据转换为模型类的实例。这是正确的吗?那么

  • 当条目太多时,这是否会导致内存溢出,或者Django是否有办法处理这种副作用
  • 调用
    Person.objects.filter(name=“Paul”)
    时,我希望Django执行类似于
    SELECT*FROM myapp\u Person的SQL查询,其中name='Paul'
    ,但是如果以前调用过
    Person.objects.all()
    ,会怎么样?django是缓存它们还是只执行每个调用的请求
  • Django从数据库中分部分读取对象,但在QuerySet对象中进行缓存。所以,如果您已经从queryset中读取了全部数据,那么将使用内存
  • 所有返回QuerySet的QuerySet方法实际上都在内部复制了它,并且不复制新对象中的任何缓存。因此,您可以确保queryset始终包含实际数据,无论其“父级”或qs本身是否已被处理
  • Django从数据库中分部分读取对象,但在QuerySet对象中进行缓存。所以,如果您已经从queryset中读取了全部数据,那么将使用内存
  • 所有返回QuerySet的QuerySet方法实际上都在内部复制了它,并且不复制新对象中的任何缓存。因此,您可以确保queryset始终包含实际数据,无论其“父级”或qs本身是否已被处理

  • 您是想理解Django的ORM,还是想在PHP中复制它?如果这是后者,你有没有看过像Doctrine这样的PHP ORM?这里有一些很好的见解。顺便说一句,我认为FLOW3也有一个ORM。不确定幕后的所有内存管理,但关于第二个问题,Django只在使用对象时调用数据库,就像在循环中一样。您可以输入
    p=Person.objects.all()
    然后
    p.filter(name=“Paul”)
    ,到目前为止,Django尚未访问数据库。一旦您使用QuerySet,
    用于p:…
    中的p1,它最终会访问数据库并获取记录来填充QuerySet对象。My 2cents-redbeanppp。它非常灵活,占地面积很小。整个代码库是一个文件。您是想理解Django的ORM,还是想在PHP中复制它?如果这是后者,你有没有看过像Doctrine这样的PHP ORM?这里有一些很好的见解。顺便说一句,我认为FLOW3也有一个ORM。不确定幕后的所有内存管理,但关于第二个问题,Django只在使用对象时调用数据库,就像在循环中一样。您可以输入
    p=Person.objects.all()
    然后
    p.filter(name=“Paul”)
    ,到目前为止,Django尚未访问数据库。一旦您使用QuerySet,
    用于p:…
    中的p1,它最终会访问数据库并获取记录来填充QuerySet对象。My 2cents-redbeanppp。它非常灵活,占地面积很小。整个代码库是一个文件。