Django-ORM数据库操作
背景
Django框架功能齊全自帶數(shù)據(jù)庫操作功能,由于工作中設(shè)計(jì)巨量的api接口,需要一個(gè)很好的web后端服務(wù)框架,Django給了莫大的幫助。本文主要介紹Django的ORM框架
我們一般對(duì)數(shù)據(jù)庫的使用的認(rèn)識(shí)是:
- 創(chuàng)建數(shù)據(jù)庫,設(shè)計(jì)表結(jié)構(gòu)和字段
- 使用 MySQLdb 來連接數(shù)據(jù)庫,并編寫數(shù)據(jù)訪問層代碼
- 業(yè)務(wù)邏輯層去調(diào)用數(shù)據(jù)訪問層執(zhí)行數(shù)據(jù)庫操作
ORM是什么?
ORM:Object Relational Mapping(關(guān)系對(duì)象映射),在django中,根據(jù)代碼中的類自動(dòng)生成數(shù)據(jù)庫的表也叫--code first。
- 類名對(duì)應(yīng)------》數(shù)據(jù)庫中的表名
- 類屬性對(duì)應(yīng)---------》數(shù)據(jù)庫里的字段
- 類實(shí)例對(duì)應(yīng)---------》數(shù)據(jù)庫表里的一行數(shù)據(jù)
- obj.id obj.name.....類實(shí)例對(duì)象的屬性
Django ORM的優(yōu)勢:
Django的orm操作本質(zhì)上會(huì)根據(jù)對(duì)接的數(shù)據(jù)庫引擎,翻譯成對(duì)應(yīng)的sql語句;所有使用Django開發(fā)的項(xiàng)目無需關(guān)心程序底層使用的是MySQL、Oracle、sqlite....,如果數(shù)據(jù)庫遷移,只需要更換Django的數(shù)據(jù)庫引擎即可。
總的來說,Django的ORM 在設(shè)計(jì)初已經(jīng)考慮了大量web設(shè)計(jì)中數(shù)據(jù)庫操作的共有需求,配置好數(shù)據(jù)庫后,就可以像使用變量模型一樣操作數(shù)據(jù)庫中數(shù)據(jù)。
一、數(shù)據(jù)庫配置(MySQL)
1、創(chuàng)建數(shù)據(jù)庫 (注意設(shè)置 數(shù)據(jù)的字符編碼)
由于Django自帶的orm是data_first類型的ORM,使用前必須先創(chuàng)建數(shù)據(jù)庫
2、修改project中的settings.py文件中設(shè)置 連接 MySQL數(shù)據(jù)庫(Django默認(rèn)使用的是sqllite數(shù)據(jù)庫)
擴(kuò)展:查看orm操作執(zhí)行的原生SQL語句,在project中的settings.py文件增加。
LOGGING = {'version': 1,'disable_existing_loggers': False,'handlers': {'console':{'level':'DEBUG','class':'logging.StreamHandler',},},'loggers': {'django.db.backends': {'handlers': ['console'],'propagate': True,'level':'DEBUG',},} }3、由于Django2.X后只支持python3,而目前MySQLdb對(duì)python3沒有支持,所以需要使用pymysql,在django項(xiàng)目中修改project 中的__init__py 文件設(shè)置 Django默認(rèn)連接MySQL的方式
import pymysql pymysql.install_as_MySQLdb()4、setings文件注冊(cè)APP
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','app01.apps.App01Config',]注冊(cè)APP后,Django會(huì)根據(jù)APP的名稱等生成并使用表/庫。Django中數(shù)據(jù)庫必須有非空主鍵,而且如果沒有聲明,所有的字段都會(huì)默認(rèn)設(shè)計(jì)成非空。
注:由于所有字段都默認(rèn)是非空,所以在增加字段時(shí)會(huì)報(bào)錯(cuò),
解決辦法是增加:null=Ture,聲明。
總結(jié)
以上是生活随笔為你收集整理的Django-ORM数据库操作的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Quartz业务类无法注入Spring对
- 下一篇: 不满足于汽车制造,丰田展示仿钢铁侠机器支