Python Day73django ORM模型
阿新 • • 發佈:2017-12-07
manage blog 好的 類屬性 插入 ogg delete 找不到 spa
python的類名--------------->SQL語句的表名 python的類屬性--------------->SQL語句的表名下的字段 python的類屬性的約束--------------->SQL語句的表名下的字段類型 類的實例對象--------------->表中的一條記錄
一、創建表(建立模型)
1、創建類(創建表)
在應用的models.py文件中創建類,如下例:
from django.db import models class Student(models.Model): #必須繼承models.Model類 sid=models.AutoField(primary_key=True) #主鍵且自增 name=models.CharField(max_length=11) #字符串類型,且最大字符數為11 birth=models.DateField() #日期類型,如:Y-m-d
然後在terminal執行如下兩條命令後,會自動執行models.py文件,將定義的類生成對應的表:
python manage.py makemigrations python manage.py migrate
如果我們需要在已經建好的表中增加字段,那麽我們只需要在對應的類中增加字段,然後重新執行上述兩條命令即可,但是需要強調的是,增加的字段必須設置默認值,否則執行命令時會成功。設置默認值是為了保證之前已經插入的數據行的新增字段有值。如下例:
from django.db import models class Student(models.Model): sid=models.AutoField(primary_key=True) name=models.CharField(max_length=11) birth=models.DateField() age=models.IntegerField( default=3) #整數類型,為後來新增字段,需要設置默認值
二、添加數據
models文件只負責定義類(創建表),表數據的增刪改查是在views視圖函數中執行,如下添加數據實例:
from app01.models import Student def add(request): if request.method=="POST": stu_name=request.POST.get("name") stu_birth=request.POST.get("birth") stu_age=request.POST.get("age") #方式一: s=Student(name=stu_name,birth=stu_birth,age=stu_age) s.save() #保存數據到數據庫 #方式二: Student.objects.create(name=stu_name,birth=stu_birth,age=stu_age) return redirect("/index/") return render(request,"add.html")
上述實例需要註意一點:雖然models.py文件和views.py文件在同一應用目錄下,但是在上述引用模塊時不能寫成from models import Student,因為執行我們項目的文件是manage.py文件,並不與應用app01下的文件在同一級目錄,而是與app01文件同級,所以根本找不到對應的模塊。
表數據的增刪改查操作,其實會被翻譯成相應的sql語句,在setting文件中進行如下設置,即可在進行數據操作時在屏幕打印相應的sql語句:
LOGGING = { ‘version‘: 1, ‘disable_existing_loggers‘: False, ‘handlers‘: { ‘console‘:{ ‘level‘:‘DEBUG‘, ‘class‘:‘logging.StreamHandler‘, }, }, ‘loggers‘: { ‘django.db.backends‘: { ‘handlers‘: [‘console‘], ‘propagate‘: True, ‘level‘:‘DEBUG‘, }, } }
執行添加函數後屏幕打印的結果:
三、編輯數據
首先按照ORM方式,查詢到符合要求的queryset對象,然後update()將符合要求的對象進行更新,實例如下:
from app01.models import Student def edit(request,id): if request.method=="POST": stu_name=request.POST.get("name") stu_birth=request.POST.get("birth") stu_age=request.POST.get("age") Student.objects.filter(tid=id).update(name=stu_name,birth=stu_birth,age=stu_age) return redirect("/index/") stu=Student.objects.filter(tid=id)[0] return render(request,"edit.html",{"stu":stu})
四、刪除數據
首先按照ORM方式,查詢到符合要求的queryset對象,然後delete()將符合要求的對象進行刪除,實例如下:
def delet(request,id): Student.objects.filter(tid=id).delete() return redirect("/index/")
Python Day73django ORM模型