[django]orm增删改查

体现在一个融合性

orm操作环境模拟

class Book(models.Model):
    name = models.CharField(max_length=30, verbose_name="书名")
    price = models.IntegerField(verbose_name="价格")
    pub_date = models.DateField(verbose_name="出版日期")
- 添加author字段 设置默认值
class Book(models.Model):
    name = models.CharField(max_length=30, verbose_name="书名")
    price = models.IntegerField(verbose_name="价格")
    pub_date = models.DateField(verbose_name="出版日期")
    author = models.CharField(max_length=40, null=False)

url设置

from django.views.generic import TemplateView
from app01 import views

urlpatterns = [
    path('', TemplateView.as_view(template_name="index.html")),
    path('addbook/', views.addbook, name="addbook"),
    path('admin/', admin.site.urls),
]
app01/templates/index.html


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>book page</title>
</head>
<body>
<div class="content">
    <p><a href="/addbook/">添加书籍</a></p>
    <p><a href="/updatebook/">修改书籍</a></p>
    <p><a href="/deletebook/">删除书籍</a></p>
</div>
</body>
</html>

创建一个表

- 方法1
from app01.models import Book

def addbook(request):
    b = Book(name="python参考手册", price=99, author="mm", pub_date="2017-12-12")
    b.save()
    return render(request, "addbook.html")
- 方法2: 无需保存
def addbook(request):
    Book.objects.create(name="python参考手册", price=99, author="mm", pub_date="2017-12-12")
    return render(request, "addbook.html")

- 如果前端ajax传递过来是json(除非字段一一对应,否则报错)
Book.objects.create(**dict)

orm修改值

- 方法1: update批量修改
def updatebook(request):
    Book.objects.filter(author="mm").update(price=9)
    return HttpResponse("更新成功")
# 一条记录是一个实例 如果get到多条,会报错.
<class 'app01.models.Book'>
Book object (1)
- 方法2: get修改
def updatebook(request):
    # Book.objects.filter(author="mm").update(price=9)
    b = Book.objects.get(author = "mm")
    b.price=22
    b.save()

    return HttpResponse("更新成功")
filter: 返回queryset
get:    返回一条记录, 可调用save()


1,批量修改
filter
    1,返回值,返回值类型
        <class 'django.db.models.query.QuerySet'>
        <QuerySet [<Book: Book object (1)>]>
    2,可以批量修改操作

2,get
    1,确保库中只有一条
    2,如果多条会报错
    3,一条sql即一个实例
    4,返回值和返回值类型
        <class 'app01.models.Book'>
        Book object (1)

参考

update是queryset对方的方法, (生产用update,save方法不好)
get返回的是一个model对象, 用save操作,没有update方法

  1. 查看执行的sql: 感受update和save的区别

- 追加到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',
        },
    }
}

删除接口

def delete(request):
    Book.objects.filter(author="mm").delete()
    return HttpResponse("删除成功")

查询api






了不起的双下划线

对应sql的like

posted @ 2018-04-17 23:58  mmaotai  阅读(140)  评论(0编辑  收藏  举报