1. 程式人生 > >Python Day73django ORM模型

Python Day73django ORM模型

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模型