191024DjangoORM之單表操做

1、ORM基礎

  • ORM:object relation mapping 對象關係映射表

一、配置鏈接MySQL

  • settings.py:將默認配置刪除,加入如下配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'Djangoorm',  #數據庫名稱
        'USER': 'dongfei',  #數據庫用戶名
        'PASSWORD': 'dongfei',  #數據庫密碼
        'HOST': '192.168.56.101',  #數據庫主機,留空默認爲localhost
        'PORT': '3306',  #數據庫端口
    }
}

二、初始化數據庫和建立表

  • app/models.py
class Book(models.Model):  #不寫id字段Django會自動給加一個id字段,而且會將此字段設置爲主鍵、自增加
    name = models.CharField(max_length=30)
    price = models.FloatField()
    pub_date = models.DateField()
    author = models.CharField(max_length=20,null=False)
  • 如下命令在cmd執行
>pip3 install mysqlclient
>python manage.py makemigrations
>python manage.py migrate

2、數據的增刪改

一、插入數據

  • 方式一
from django.shortcuts import render,HttpResponse
from app.models import *
def addbook(request):
    b = Book(name="吶喊",price=38.8,author="魯迅",pub_date="1923-08-01")
    b.save()
    return HttpResponse("添加成功")
  • 方式二(推薦)
from django.shortcuts import render,HttpResponse
from app.models import *
def addbook(request):
    Book.objects.create(name="彷徨",price=58.8,author="魯迅",pub_date="1926-08-01")
    return HttpResponse("添加成功")

二、修改數據

  • 方式一(推薦)
def update(request):
    Book.objects.filter(name="吶喊").update(price=48.88)
    return HttpResponse("修改爲功")
  • 方式二
def update(request):
    b = Book.objects.get(name="彷徨")
    b.price = 38.88
    b.save()
    return HttpResponse("修改爲功")

補充:打印SQL語句日誌,在settings.py中加入如下代碼html

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

三、刪除數據

def delbook(request):
    Book.objects.filter(name="吶喊").delete()
    return HttpResponse("刪除成功")

3、單表記錄的查詢

  • 單表查詢
def select(request):
    book_list = Book.objects.filter(id=1)  #拿到的是一個集合

    book_list = Book.objects.exclude(id=2)  #排除id=2的記錄,和filter相反

    book_list = Book.objects.get(id=1)  #拿到的是一個對象

    book_list = Book.objects.all()[:3]  #取全部的記錄,支持列表切片操做

    book_list = Book.objects.first()  #取第一條記錄

    book_list = Book.objects.last()  #取最後一條記錄

    book_list = Book.objects.filter(author="餘華").values("name","price")  #具體取某個字段,返回字典

    book_list = Book.objects.filter(author="餘華").values_list("name","price")  #具體取某個字段,返回元組

    book_list = Book.objects.all().values("name").distinct()  #去重

    book_list = Book.objects.all().order_by("price")  #排序

    book_list = Book.objects.all().order_by("price").reverse()  #反向排序

    book_list = Book.objects.all().order_by("price").count()  #統計

    book_list = Book.objects.filter(price__gt=30).values("name","price")  #查詢價格大於30的

    book_list = Book.objects.filter(name__icontains="小")  #查詢書名中包含」小「的書籍

    return render(request,'index.html',{"book_list": book_list})
  • 單表查詢的模糊匹配
Book.objects.filter(id__lt=10, id__gt=1)  # 獲取id大於1 且 小於10的值

   Book.objects.filter(id__in=[11, 22, 33])  # 獲取id等於十一、2二、33的數據

   Book.objects.filter(id__in=[11, 22, 33])  # not in

   Book.objects.filter(name__contains="小")  #包含

   Book.objects.filter(name__icontains="小")  # icontains大小寫不敏感

   Book.objects.filter(id__range=[1, 2])  # 範圍bettwen and
相關文章
相關標籤/搜索