python之路_django ORM模型(單表)(一)

python的類名--------------->SQL語句的表名
python的類屬性--------------->SQL語句的表名下的字段
python的類屬性的約束--------------->SQL語句的表名下的字段類型   
類的實例對象--------------->表中的一條記錄

1、建立表(創建模型html

一、建立類(建立表)python

  在應用的models.py文件中建立類,以下例:sql

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

  若是咱們須要在已經建好的表中增長字段,那麼咱們只須要在對應的類中增長字段,而後從新執行上述兩條命令便可,可是須要強調的是,增長的字段必須設置默認值,不然執行命令時會成功。設置默認值是爲了保證以前已經插入的數據行的新增字段有值。以下例:django

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)                                 #整數類型,爲後來新增字段,須要設置默認值

2、添加數據app

  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語句:3d

LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
} 

  執行添加函數後屏幕打印的結果:code

 3、編輯數據

  首先按照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})

 4、刪除數據

   首先按照ORM方式,查詢到符合要求的queryset對象,而後delete()將符合要求的對象進行刪除,實例以下:

def delet(request,id):
    Student.objects.filter(tid=id).delete()
    return redirect("/index/")
相關文章
相關標籤/搜索