一、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. windows下php配置环境变量

    这样重启终端后,通过php -v可查看新使用的php版本信息. 注:在path配置在上方的先生效

  2. sql server SQL 服务器 - RDBMS

    SQL 服务器 - RDBMS --现代的 SQL 服务器构建在 RDBMS 之上. DBMS - 数据库管理系统(Database Management System) --数据库管理系统是一种可以 ...

  3. 第二章 单表查询 T-SQL语言基础(3)

    单表查询(3) 2.6 处理字符数据 字符数据的查询处理,内容包括:类型,排序规则,运算符和函数,以及模式匹配. 2.6.1 数据类型 SQL Server支持两种字符数据类型----普通字符和Uni ...

  4. MySQL存储引擎知多少

    MySQL是我们经常使用的数据库处理系统(DBMS),不知小伙伴们有没有注意过其中的“存储引擎”(storage_engine)呢?有时候面试题中也会问道MySQL几种常用的存储引擎的区别.这次就简短 ...

  5. vue iview表格应用

    今天看一下iview表格的使用.本文中有以下内容 table的必备部分(columns,data) render函数的使用(判断,添加样式,动态添加class...) slot使用 主要讲render ...

  6. Reference to ‘xxxxx’ is ambiguous 错误

    1.原因,在当前类重复引入了 类库,比如 pch里面导入了#import "XXX" 此类的.h 又引入 #import <xxx/xxx> 导致 解决方法:删除此类的 ...

  7. Delphi Label组件

  8. SSD学习笔记

    目标检测算法——SSD:Single Shot MultiBox Detector,是一篇非常经典的目标检测算法,十分值得阅读和进行代码复现,其论文地址是:https://arxiv.org/abs/ ...

  9. 标准模板库(STL)

    组件: 容器:管理某类对象的集合. 迭代器:用来在一个对象集合内遍历元素. 算法:处理集合内的元素. 容器 序列式容器:顾名思义.array,vector,deque,list 和 forward_l ...

  10. Lomsat gelral CodeForces - 600E (树上启发式合并)

    You are given a rooted tree with root in vertex 1. Each vertex is coloured in some colour. Let's cal ...