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代码。