Django学习--ORM机制详解

Posted hskullbk

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django学习--ORM机制详解相关的知识,希望对你有一定的参考价值。

1.定义:
对象关系映射(Object Relational Mapping,简称ORM),用于实现面向对象编程语言里不同类型系统的数据之间的转换。换句话说,就是用面对对象的方式去操作数据库的创建表,增,删,改,查等操作。
类名对应------》数据库中的表名

类属性对应---------》数据库里的字段

类实例对应---------》数据库表里的一行数据


2.演示:查看ORM生成sql语句
    1)使用QuerySet中的query属性
技术分享图片

    2)配置日志系统,将sql显示到控制台
        只需在settings.py中配置如下logging即可
LOGGING = {
    ‘version‘: 1,
    ‘disable_existing_loggers‘: False,
    ‘handlers‘: {
        ‘console‘:{
            ‘level‘:‘DEBUG‘,
            ‘class‘:‘logging.StreamHandler‘,
        },
    },
    ‘loggers‘: {
        ‘django.db.backends‘: {
            ‘handlers‘: [‘console‘],
            ‘propagate‘: True,
            ‘level‘:‘DEBUG‘,
        },
    }
}
 
1
LOGGING = {
2
    ‘version‘: 1,
3
    ‘disable_existing_loggers‘: False,
4
    ‘handlers‘: {
5
        ‘console‘:{
6
            ‘level‘:‘DEBUG‘,
7
            ‘class‘:‘logging.StreamHandler‘,
8
        },
9
    },
10
    ‘loggers‘: {
11
        ‘django.db.backends‘: {
12
            ‘handlers‘: [‘console‘],
13
            ‘propagate‘: True,
14
            ‘level‘:‘DEBUG‘,
15
        },
16
    }
17
}
    3)使用一些开发工具:如django_debug_toolbar

3.ORM优缺点:
    优点:1)是的我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句,快速开发,由此而来。同时也可以避免一些新手程序猿写sql语句带来的性能和效率问题。
               2)Django的orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句;所有使用Django开发的项目无需关心程序底层使用的是mysql、Oracle、sqlite....,如果数据库迁移,只需要更换Django的数据库引擎即可
    缺点:1)性能有所牺牲,不过现在的各种ORM框架都在尝试使用各种方法来减轻这个问题(LazyLoad,Cache),效果还是很显著。
               2)对于个别复杂查询,ORM仍然力不从心,为解决这个问题,ORM框架一般也提供直接写原生sql代码。














以上是关于Django学习--ORM机制详解的主要内容,如果未能解决你的问题,请参考以下文章

Python全栈之路--Django ORM详解

Django学习手册 - ORM 数据表操作

075: Django数据库ORM聚合函数详解-Sum

django_ORM用法详解

067:Django数据库ORM查询条件详解-range

071:Django数据库ORM聚合函数详解-Avg