ORM: 優(yōu)點(diǎn): 1.簡(jiǎn)單,不用自己SQL語句 2.開發(fā)效率高 缺點(diǎn): 1.記憶你這個(gè)特殊的語法 2. 相對(duì)于大神的SQL語句,肯定執(zhí)行效率有差距
ORM的對(duì)應(yīng)關(guān)系: 類 ---> 數(shù)據(jù)表 對(duì)象 ---> 數(shù)據(jù)行 屬性 ---> 字段
ORM能做的事兒: 1.操作數(shù)據(jù)表 ---> 創(chuàng)建表、刪除表、修改表 2.操作數(shù)據(jù)行 ---> 數(shù)據(jù)的增、刪、改、查 注意事項(xiàng):不能創(chuàng)建數(shù)據(jù)庫、自己動(dòng)手創(chuàng)建數(shù)據(jù)庫
1. 修改django項(xiàng)目中settings.py 中數(shù)據(jù)庫連接類型:
create database dbs11;
2. 在Django項(xiàng)目中設(shè)置連接數(shù)據(jù)庫的相關(guān)配置(告訴Django連接哪一個(gè)數(shù)據(jù)庫)
#數(shù)據(jù)庫相關(guān)配置 DATABASES = { 'default':{ #連接的數(shù)據(jù)庫類型 'ENGINE':'django.db.backends.mysql', #連接數(shù)據(jù)庫的地址 'HOST':'127.0.0.1', #數(shù)據(jù)庫端口 'PORT':3306, #連接數(shù)據(jù)庫的名稱 'NAME':"dbs11", #連接數(shù)據(jù)庫的用戶名 'USER':'root', #連接數(shù)據(jù)庫的密碼 'PASSWORD':'123456' } }
3.告訴Django用pymysql代替默認(rèn)的MySQLDB 連接MySQL數(shù)據(jù)庫
在項(xiàng)目目錄中__init__.py文件中導(dǎo)入MySQL連接配置文件
import pymysql #告訴Django用pymysql來代替默認(rèn)的MySQLdb pymysql.install_as_MySQLdb()
4.在項(xiàng)目如(app)下面的models.py 文件中定義一個(gè)類,這個(gè)類必須繼承models.Model
from django.db import models #ORM相關(guān)的只能寫在這個(gè)文件里,寫到別的文件里Django找不到 ##例如: class UserInfo(models,Model): id = models.AutoField(primary_key=True) #創(chuàng)建一個(gè)自增的主鍵字段 name = models.CharField(null=False,max_length=16) #創(chuàng)建一個(gè)varchar類型的字段不能為空
5.執(zhí)行兩個(gè)命令
python3 manage.py makemigrations python3 manage.py migrate
說明:以上為通過ORM創(chuàng)建數(shù)據(jù)庫,如果是刪除或者修改只需要在models.py文件中刪除相關(guān)字段然后執(zhí)行第5步的兩個(gè)命令即可刪除字段。修改同樣只需要修改models.py文件然后執(zhí)行第5步的兩個(gè)命令即可。
ORM查詢
示例:ORM查詢所有用戶
#orm查詢語法:models.表名.objects.all() #查詢所有 ### ret = models.UserInfo.objects.all() print(ret[0].id,ret[0].name)
在django項(xiàng)目中應(yīng)用操作:
后端執(zhí)行方法:
from django.shortcuts import HttpResponse, render, redirect from app import models def user_list(request): #去數(shù)據(jù)庫中查詢所有的用戶 #利用ORM這個(gè)工具去查詢數(shù)據(jù)庫,不用自己去查詢 ret = models.UserInfo.objects.all() # 打開user_list.html文件, return render(request, "user_list.html", {"user_list": ret})
前端HTML
用戶列表頁 添加用戶
id值 | 用戶名 |
---|---|
{{ user.id }} | {{ user.name }} |
路由urls.py配置:
from app import views #導(dǎo)入項(xiàng)目 urlpatterns = [ url(r'^user_list/',views.user_list) #定義對(duì)應(yīng)路徑關(guān)系 ]
ORM添加
#orm添加語法:models.表名.objects.create(name=new_name) #ORM添加
示例:ORM添加用戶
models.UserInfo.objects.create(name=new_name)
路由urls.py配置:
from app import views #導(dǎo)入項(xiàng)目 urlpatterns = [ url(r'^user_list/',views.user_list), #定義對(duì)應(yīng)路徑關(guān)系 url(r'^user_add/',views.user_add), ]
后端執(zhí)行方法:
def user_add(request): if request.method == "POST": #用戶填寫新的用戶名,并發(fā)送POST請(qǐng)求 new_name = request.POST.get('username',None) #去數(shù)據(jù)庫中創(chuàng)建一條用戶記錄 models.UserInfo.objects.create(name=new_name) ##添加成功后返回展示網(wǎng)頁 return redirect("/user_list/") #第一個(gè)請(qǐng)求頁面的時(shí)候,就返回一個(gè)頁面,頁面上有兩個(gè)框讓用戶填寫 return render(request,"add_user.html")
前端執(zhí)行的方法:
添加用戶
ORM與原生SQL查詢
#原生SQL #查詢所有 select * from user; ##ORM語法: models.user.objects.all() ###ORM條件語句查詢 #filter條件(SQL:where) models.user.objects.filter(id=1) #條件大于 ##SQL: SELECT * from user where id>1 and password='123' #ORM gte models.user.objects.filter(id__gt=1,password='123') #條件 like語法 ##ORM models.user.objects.filter(password__startswith='a') #以a開頭 .這里對(duì)大小寫敏感,而SQL like不敏感 models.user.objects.fileter(username__icontains='a') #對(duì)大寫不敏感的,即a,A都匹配 #SQL in 語句對(duì)比ORM語句 select ... where id in(1,2,3,4); models.user.objects.filter(id__in=[1,2,3,4]) ##ORM查詢?nèi)掌?models.user.objects.filter(register_date_month=5) models.user.objects.filter(register_date_month=5)[0].register_date #對(duì)比SQL語句 select ... where extract('month' from pub_date) = '12'; ##ORM批量創(chuàng)建用戶 #有100個(gè)創(chuàng)建對(duì)象 objs = [models.user(title='name{}'.format(i)) for i in range(100)] models.user.objects.bulk_create(onjs,10) #這里是10個(gè)一提交,即每次創(chuàng)建10個(gè)用戶
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。