zoukankan      html  css  js  c++  java
  • diango中orm的惰性机制

    那么首先要知道什么是ORM

    专业化的角度来说:叫对象关系映射(Object-Relation Mapping)是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术。

    那具体ORM是什么呢?:(在django中,根据代码中的类自动生成数据库的表也叫--code first)ORM:

    ORM在面向对象模型与关系模型之间架起桥梁。

    通过对象与数据库之间映射的元数据,自动透明地把编译语音中的对象持久化到关系数据库里,对数据库的操作可以转换为对对象的操作

    ORM 有下面这些优点。

    • 数据模型都在一个地方定义,更容易更新和维护,也利于重用代码。
    • ORM 有现成的工具,很多功能都可以自动完成,比如数据消毒、预处理、事务等等。
    • 它迫使你使用 MVC 架构,ORM 就是天然的 Model,最终使代码更清晰。
    • 基于 ORM 的业务代码比较简单,代码量少,语义性好,容易理解。
    • 你不必编写性能不佳的 SQL。

    但是,ORM 也有很突出的缺点。

    • ORM 库不是轻量级工具,需要花很多精力学习和设置。
    • 对于复杂的查询,ORM 要么是无法表达,要么是性能不如原生的 SQL。
    • ORM 抽象掉了数据库层,开发者无法了解底层的数据库操作,也无法定制一些特殊的 SQL。

    Django惰性机制

    所谓惰性机制:Publisher.objects.all()或者.filter()等都只是返回了一个QuerySet(查询结果集对象),它并不会马上执行sql,而是当调用QuerySet的时候才执行。

    惰性机制之可迭代

    1
    2
    3
    # objs=models.Book.objects.all() # [obj1,obj2,ob3...]
    for obj in objs: # 每一obj就是一个行对象,此时会执行sql
    #     print("obj:",obj)

    惰性机制之可切片

    1
    2
    3
    4
    # objs=models.Book.objects.all() # [obj1,obj2,ob3...]
    # print(objs[1])
    # print(objs[1:4])
    # print(objs[::-1])

    惰性机制之Django缓存问题

        Django有自己的缓存,如果2次的obj对象一致,第二次的查值直接从缓存中取值。

        如果期间数据库的内容作了更改,则需要重新查值。否则容易产生脏数据。

        可以直接利用第一次的obj对象直接进行update操作,这样下次for循环查询时又重新执行了数据库查询操作,此时缓存也作了更改; 也可以重新手动查询一下结果,但是不推荐这样,因为我们并不知道数据什么时候会进行修改,妥善的还是Django用数据时自己去查询数据结果

    如果2次操作之间有数据进行了修改 ,则需要重新从数据库中查值,否则Django会从缓存中取出数据,影响最后的查询结果

  • 相关阅读:
    南邮NOJ整除的尾数
    【HDOJ】2844 Coins
    【HDOJ】2546 饭卡
    【HDOJ】1031 Design T-Shirt
    【HDOJ】1983 Kaitou Kid
    【HDOJ】2612 Find a way
    【原创】如何构建MIPS交叉编译工具链
    【HDOJ】1239 Calling Extraterrestrial Intelligence Again
    【Python Network】使用DOM生成XML
    【HDOJ】2602 Bone Collector
  • 原文地址:https://www.cnblogs.com/shudu/p/11805275.html
Copyright © 2011-2022 走看看