Python学习第三十一课——ORM单表增删改查

Urls.py

from django.conf.urls import url
from django.contrib import admin
from django.urls import path
from app02 import views


urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'index/',views.index),
    url(r'addBook/',views.addbook),
    url(r'update/',views.update),
    url(r'delete/',views.delete),
    url(r'select/',views.select),

]

views.py 

from django.shortcuts import render, HttpResponse

# Create your views here.
from app02.models import *


def index(request):
    return render(request, "index.html")


# 添加数据方法一:通过实例对象添加
# def addbook(request):
#
#     b=Book(name="python基础",price=99,author="han",pub_date="2017-12-12")
#     b.save()
#
#     return HttpResponse("添加成功")


# 添加数据方法二:
def addbook(request):
    Book.objects.create(name="JAVA基础", price=50, author="han", pub_date="2017-12-12")
    # Book.objects.create(**dic)
    return HttpResponse("添加成功")


# 表记录修改方法一:filter update
# def update(request):
#     # 先查 后改
#     Book.objects.filter(id="1").update(price=999)
#
#     return HttpResponse("修改成功!")

# 表记录修改方法二:get
def update(request):
    # get方法
    b = Book.objects.get(id="2")
    b.price = 200
    b.save()

    return HttpResponse("修改成功!")


def delete(request):
    Book.objects.filter(id="1").delete()
    return HttpResponse("删除成功!")

# 查询方法一:

def select(req):
    # book_list = Book.objects.all()
    # print(book_list)
    # print(book_list[0])  # PHP

    # 也可以进行切片
    # book_list = Book.objects.all()[:2]  # 切片 查两条出来

    # book_list = Book.objects.filter(author='han') # filter 可以取出多条结果 如果按照作者来取,作者有两个就可以用filter
    # book_list = Book.objects.get(id=2)  # get 只能取出来一条

    book_list = Book.objects.filter(id=2).values("name","price") #values 通过查到ID=2的一条记录  然后取出name字段的值

    return render(req, "index.html", {"book_list":book_list})


# def select(req):
#     book_list = Book.objects.all()
#     # print(book_list)
#     # print(book_list[0])  # PHP
#     return render(req, "index.html", {"book_list":book_list})

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        .head{
            line-height: 40px;
            background-color: green;
            color: white;
            text-align: center;
        }

    </style>


</head>
<body>
<div class="outer">
    <div class="head">标题</div>
    <div class="contend">
        <a href="/addBook/">添加书籍</a>
        <a href="/update">修改书籍</a>
        <a href="/delete">删除书籍</a>
        <a href="/select/">查询书籍</a>
        <hr>
        <div class="queryResult" >
            {% for book in book_list %}
                <div>
                    <p>{{ book.name }} {{ book.author }} {{ book.price }}</p>
                </div>


            {% endfor %}

        </div>



    </div>


</div>


</body>
</html>

settings.py

# settings.py中最后面加上这个 当你执行修改的时候可以看到语句
LOGGING = {
    'version': 1,
    'disable_existing_loggers': False,
    'handlers': {
        'console':{
            'level':'DEBUG',
            'class':'logging.StreamHandler',
        },
    },
    'loggers': {
        'django.db.backends': {
            'handlers': ['console'],
            'propagate': True,
            'level':'DEBUG',
        },
    }
}

# 查询相关API:

# 查询相关API:

#  <1>filter(**kwargs):      它包含了与所给筛选条件相匹配的对象

#  <2>all():                 查询所有结果

#  <3>get(**kwargs):         返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。

# -----------下面的方法都是对查询的结果再进行处理:比如 objects.filter.values()--------

#  <4>values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列 model的实例化对象,而是一个可迭代的字典序列

#  <5>exclude(**kwargs):     它包含了与所给筛选条件不匹配的对象

#  <6>order_by(*field):      对查询结果排序

#  <7>reverse():             对查询结果反向排序

#  <8>distinct():            从返回结果中剔除重复纪录

#  <9>values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列

#  <10>count():              返回数据库中匹配查询(QuerySet)的对象数量。

# <11>first():               返回第一条记录

# <12>last():                返回最后一条记录

#  <13>exists():             如果QuerySet包含数据,就返回True,否则返回False。
原文地址:https://www.cnblogs.com/pyhan/p/12400899.html