一、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. MySQL存储引擎知多少

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

  2. java 关于数字取小数点后两位出现整数0没有的问题

    最近再项目中对取到的一系列带很长小数的数字,展现时要求去小数点后两位显示就可以了 开始我是以下写法: double  a =  0.1234455; DecimalFormat decimalForm ...

  3. 01 Linux常用基本命令(一)

    1.远程连接服务器 Xshell为例: ssh 用户名@IP地址 (ssh root@192.168.119.139) 查看服务器的IP地址: ifconfig (ip addr) 2.命令 1.ls ...

  4. ArcGis之popup列表字段自定义

    ArcGis之popup列表字段自定义 featureLayer图层中可以使用popupTemplate属性添加弹窗. API:https://developers.arcgis.com/javasc ...

  5. 转载:ubuntu 下添加简单的开机自启动脚本

    转自:https://www.cnblogs.com/downey-blog/p/10473939.html linux下添加简单的开机自启动脚本 在linux的使用过程中,我们经常会碰到需要将某个自 ...

  6. JDK1.8中LinkedList的实现原理及源码分析

    详见:https://blog.csdn.net/cb_lcl/article/details/81222394 一.概述           LinkedList底层是基于双向链表(双向链表的特点, ...

  7. Chrome去掉标签页8个框

    最终效果: 解决思路: 在标签页鼠标右击弹出的菜单项中存在“查看页面源码”一项,由此可确定chrome的标签页是由一个html页面控制的,只要修改其页面源码便能去掉8个框. 经网上查阅确定了标签页的源 ...

  8. 三种Shell脚本编程中避免SFTP输入密码的方法

    最近编程中用到sftp上传文件,且需要用crontab预设定时上传事件.而sftp不同于ftp,没有提供选项如 -i 可以将密码直接编码进程序.使用sftp指令,会自动请求用户输入密码. 总结一下可以 ...

  9. Delphi 触发异常的方法

  10. Redis位操作介绍

    在学习redis的过程了,看到了redis还能用于大数据处理,具体场景如下:腾讯10亿用户,要几个毫秒内查询到某个用户是否在线,你能怎么做?千万别说给每个用户建立一个key,然后挨个记(你可以算一下需 ...