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