一、ORM基础

  • ORM:object relation mapping 对象关系映射表

1、配置连接MySQL

  • settings.py:将默认配置删除,加入以下配置
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'Djangoorm',  #数据库名称
        'USER': 'dongfei',  #数据库用户名
        'PASSWORD': 'dongfei',  #数据库密码
        'HOST': '192.168.56.101',  #数据库主机,留空默认为localhost
        'PORT': '3306',  #数据库端口
    }
}

2、初始化数据库和创建表

  • 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

二、数据的增删改

1、插入数据

  • 方式一
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("添加成功")

2、修改数据

  • 方式一(推荐)
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中加入以下代码

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

3、删除数据

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

三、单表记录的查询

  • 单表查询
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等于11、22、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

191024DjangoORM之单表操作的更多相关文章

  1. 学习MySQL之单表操作(二)

    ##单表操作 ##创建表 CREATE TABLE t_employee( empno ), ename ), job ), MGR ), Hiredate DATE DEFAULT '0000-00 ...

  2. c# 数据库编程(利用DataSet 和 DataAdaper对象操作数据库--单表操作)

    一.概述 前面2篇文章,介绍了使用SqlCommand对象利用sql命令来操作数据库. 这篇文章我们来介绍使用c#的DataSet 和 DataAdaper对象操作操作数据库. 先来介绍下这两个对象是 ...

  3. Hibernate单表操作

    单一主键 assigned:由Java应用程序负责生成(即手工的赋值) native:由底层的数据库自动的生成标示符,如果是MySQL就是auto_increment,如果是Oracle就是seque ...

  4. Django学习笔记(7)——单表操作和多表操作

    单表操作 1,创建模型 创建名为book的APP,在book下的models.py中创建模型: from django.db import models # Create your models he ...

  5. web框架开发-Django模型层(1)之ORM简介和单表操作

    ORM简介 不需要使用pymysql的硬编码方式,在py文件中写sql语句,提供更简便,更上层的接口,数据迁移方便(有转换的引擎,方便迁移到不同的数据库平台)…(很多优点),缺点,因为多了转换环节,效 ...

  6. Django模型层-单表操作

    ORM介绍 MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库,这极大的减轻了开发人员的 ...

  7. python 全栈开发,Day71(模型层-单表操作)

    昨日内容回顾 1. {% include '' %} 2. extend base.html: <html> ..... ..... ..... {% block content%} {% ...

  8. Django单表操作

    一.数据库相关设置 配置ORM的loggers日志: # 配置ORM的loggers日志 LOGGING = { 'version': 1, 'disable_existing_loggers': F ...

  9. Django之模型层(单表操作)

    一.ORM简介 MVC和MTV框架中包含一个重要部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以轻松更换数据库. ORM是‘对象-关系- ...

随机推荐

  1. @RequestMapping-@PathVariable小误区

    去掉勾选就可以演示出错误了,一般勾选是为了方便我们Debug调试 会出现500错误: 正确的写法:

  2. Java版本及历史简述

    Java版本及历史简述 初学Java,对于Java那么多版本很困惑,这里做一点笔记,如有错误希望指出. Java由Sun公司创造,后Sun公司被Oracle公司收购,Java也随之变为Oracle的产 ...

  3. electron localStorage的bug

    在更新 electron 后有可能会读不到 localStorage 里的数据 推测是 localStorage 写在 Chromium 内核里,更新 electron 同时会更新 Chromium, ...

  4. python cv2读取rtsp实时码流按时生成连续视频文件

    代码实现 # coding: utf-8 import datetime import cv2 import os ip = '192.168.3.160'.replace("." ...

  5. 多线程的些许理解(平台x86,具体考虑linux,windows)

    多线程的些许理解 一.体系架构 1.原子操作 1) 定义 不可中断的一个或者一系列操作,也就是不会被线程调度机制打断的操作,在运行期间不会有任何的上下文切换(context switch). 2) 我 ...

  6. deployment控制pod进行滚动更新以及回滚

    更新pod镜像两种方式: 方式一:kubectl set image deployment/${deployment name} ${container name}=${image} 例: kubec ...

  7. 团队作业-Beta冲刺(周五)

    一. 这个作业属于哪个课程 https://edu.cnblogs.com/campus/xnsy/SoftwareEngineeringClass1/ 这个作业要求在哪里 https://edu.c ...

  8. 详解thinkphp+redis+队列的实现代码

    1,安装Redis,根据自己的PHP版本安装对应的redis扩展(此步骤简单的描述一下) 1.1,安装 php_igbinary.dll,php_redis.dll扩展此处需要注意你的php版本如图: ...

  9. java web 域对象

    四大域对象 pagecontext  表示的是当前页面的域对象Request表示的是请求域中的对象session  表示的是一次会话中的对象application表示的是在一次tc启动到一次关闭的时候 ...

  10. Python中self的用法详解,或者总是提示:TypeError: add() missing 1 required positional argument: 'self'的问题解决

    https://blog.csdn.net/songlh1234/article/details/83587086 下面总结一下self的用法详解,大家可以访问,可以针对平时踩过的坑更深入的了解下. ...