参考:https://www.cnblogs.com/liwenzhou/p/8660826.html

一  ORM单表操作

1 增删改查

 1. 查询
1. 查所有
models.Publisher.objects.all()
2. 查某个具体的记录
models.Publisher.objects.get(id=1) --> 注意查询条件不成立就报错
2. 删除一条记录
models.Publisher.objects.get(id=1).delete()
3. 创建一条记录
models.Publisher.objects.create(name="新出版社名字", addr="出版社地址")
4. 修改一条记录
obj = models.Publisher.objects.get(id=1)
obj.name = "新名字"
obj.save()

2 字段和参数:

--1. 字段
  1. CharField 字符类型,必须提供max_length
  2. AutoField int自增
  3. DateField 日期字段

  4. DateTimeField() 日期时间字段
  5. IntergeField() 整数类型
--2. 参数
  1. null=True 可以为空
  2. default=默认值
  3. unique=True 表示是唯一的
--4. 时间字段
  1. auto_now_add=True 创建数据记录的时候会把当前时间添加到数据库
  2. auto_add=True 每次更新数据记录的时候会更新该字段。

3 ORM必知必会单表查询13条:

		          1. all()		            --> 查询所有结果
2. filter() --> 根据查询条件查询数据库的
3. get() --> 获取一个唯一的值
4. exclude() --> 将符合条件的都剔除掉,留下不符合条件的
5. values('字段名', ...) --> 返回一个QuerySet,里面是字典
6. values_list(字段名', ...) --> 返回一个QuerySet,里面是元祖
7. order_by() --> 对查询结果排序
8. reverse() --> 对一个有序的查询结果集做反转
9. distinct() --> 去重,跨表查询时去掉重复的记录,MySQL不支持按字段去重
10. count() --> 返回数据条数
11. first() --> 取第一个数据
12. last() --> 取最后一条数据
13. exists() --> 判断表里有没有数据

分类:
1. 返回QuerySet列表的有哪一些?
1. all()
2. filter()
3. exclude()
4. order_by()
5. reverse()
6. distinct()

7. values('字段名', ...) --> 查询结果的列表里,都是字典
8. values_list(字段名', ...) --> 查询结果的列表里,都是元祖

2. 返回具体对象的
1. first()
2. last()
3. get()

3. 返回数字的
1. count()
4. 返回布尔值
1. exists()

4 单表查询双下划线操作

例子:

 models.Tb1.objects.filter(id__lt=10, id__gt=1)   # 获取id大于1 且 小于10的值

 models.Tb1.objects.filter(id__in=[11, 22, 33])   # 获取id等于11、22、33的数据
models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in models.Tb1.objects.filter(name__contains="ven") # 获取name字段包含"ven"的
models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感 models.Tb1.objects.filter(id__range=[1, 3]) # id范围是1到3的,等价于SQL的bettwen and 类似的还有:startswith,istartswith, endswith, iendswith  date字段还可以:
models.Class.objects.filter(first_day__year=2017)

5 如何在一个py文件中 使用Django项目的相关配置或内容,比如之间连接djanjo里面的数据库,在新建的py文件里面写上下面这个即可:

import os
if __name__ == '__main__':
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "mysite.settings")
import django
django.setup() from app01 import models

二 ORM跨表操作

1 外键 ForeignKey

通过Foreignkey字段 ,能够得到和我关联的那个对象
数据库中保存的字段名是 外键字段_id

例子:书名关联出版社

 class Book(models.Model):
title = models.CharField(max_length=32)
publisher = models.ForeignKey(to="Publisher", on_delete=models.CASCADE)
on_delete=models.CASCADE的意思是当主表删除数据之后,从表也跟着删除

2  外键增删改查操作

详情见练习和作业

3 跨表查询:

正向查询:

# 查询第一本书关联的出版社的名字
# 1. 基于对象的查询
# book_obj = models.Book.objects.first()
# ret = book_obj.publisher.name
# print(ret)
# 2. 基于queryset的双下划线查询,双下划线表示跨表
# ret = models.Book.objects.all().values_list("publisher__name").distinct()
# print(ret)

# 反向查询

# 由出版社反向查找书籍
publisher_obj=models.Publisher.objects.get(id=2)
books=publisher_obj.book_set.all()
title=books.values_list("title","id")
print(title) # 2. 基于queryset的双下划线
# 江出版社出版的所有书籍的书名
ret = models.Publisher.objects.filter(id=2).values_list("book__title","book__id")
print(ret)

17-2 orm单表操作和多表操作的更多相关文章

  1. Django框架05 /orm单表操作

    Django框架05 /orm单表操作 目录 Django框架05 /orm单表操作 1. orm使用流程 2. orm字段 3. orm参数 4. orm单表简单增/删/改 5. orm单表查询 5 ...

  2. orm单表操作

    二.orm简介 ORM:object relation mapping (ORM是“对象-关系-映射”的简称) MVC或者MVC框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦, ...

  3. day59——orm单表操作

    day59 orm单表操作 对象关系映射(object relational mapping) orm语句 -- sql -- 调用pymysql客户端发送sql -- mysql服务端接收到指令并执 ...

  4. django框架基础-ORM单表操作-长期维护

    ###############    单表操作-添加数据    ################ import os if __name__ == '__main__': os.environ.set ...

  5. day52:django:ORM单表/多表操作

    目录 1.ORM 2.ORM单表增删改查 13个必知必会的查询接口 filter基于双下划线的模糊查询 3.ORM多表增删改查 ORM 什么是ORM? ORM(object relational ma ...

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

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

  7. python 之 Django框架(orm单表查询、orm多表查询、聚合查询、分组查询、F查询、 Q查询、事务、Django ORM执行原生SQL)

    12.329 orm单表查询 import os if __name__ == '__main__': # 指定当前py脚本需要加载的Django项目配置信息 os.environ.setdefaul ...

  8. ORM单表查询,跨表查询,分组查询

    ORM单表查询,跨表查询,分组查询   单表查询之下划线 models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值models ...

  9. Django学习——Django测试环境搭建、单表查询关键字、神奇的双下划线查询(范围查询)、图书管理系统表设计、外键字段操作、跨表查询理论、基于对象的跨表查询、基于双下划线的跨表查询

    Django测试环境搭建 ps: 1.pycharm连接数据库都需要提前下载对应的驱动 2.自带的sqlite3对日期格式数据不敏感 如果后续业务需要使用日期辅助筛选数据那么不推荐使用sqlite3 ...

随机推荐

  1. [转]js作用域系列——内部原理

    前面的话 javascript拥有一套设计良好的规则来存储变量,并且之后可以方便地找到这些变量,这套规则被称为作用域.作用域貌似简单,实则复杂,由于作用域与this机制非常容易混淆,使得理解作用域的原 ...

  2. 图像Ping技术

    在CORS出现以前,要实现跨域Ajax通信颇费一些周折.开发人员想出了一些办法,利用DOM中能够执行跨域清求的功能,在不依赖XHR对象的情况下也能发送某种请求.虽然CORS技术已经无处不在,但开发人员 ...

  3. redis异常-MISCONF Redis is configured to save RDB snapshots

     在eclipse中用java代码通过jedis操作redis的时候,报这个错:   redis.clients.jedis.exceptions.JedisDataException: MISCON ...

  4. 如何获取SpringBoot项目的applicationContext对象

    ApplicationContext对象是Spring开源框架的上下文对象实例,在项目运行时自动装载Handler内的所有信息到内存.传统的获取方式有很多种,不过随着Spring版本的不断迭代,官方也 ...

  5. day38 05-Spring的BeanFactory与ApplicationContext区别

    ApplicationContext怎么知道它是一个工厂呢? BeanFactory也可以做刚才那些事情,只不过ApplicationContext对它有扩展.ApplicationContext间接 ...

  6. 阿里云DMS发布数据库网关服务: 打通网络限制 开启数据库统一管理的万能钥匙

    概述 阿里云数据管理DMS在云端可提供专业的数据库服务,除对标本地数据库软件的基础功能外,还包含性能诊断.数据追踪.跨实例SQL查询(含异构数据库类型之间)等专业性功能,同时提供审计安全和企业级数据库 ...

  7. HR招聘_(四)_招聘方法论(简历筛选)

    .主动投递 筛选时需要看学历背景,公司平台,所在时间,岗位职责,项目经验几个部分,根据对岗位需求和企业文化选择合适的候选人. 筛选简历建议分岗位筛选,切记误操作或大意淘汰优秀候选人. .搜索下载 互联 ...

  8. 转: CentOS上安装LAMP之第二步:PHP环境及安装过程报错解决方案(纯净系统环境)

    最近有空就配置CentOS系统上的AMP环境,现在配置到PHP环境了 多话不说上传送门:http://blog.csdn.net/zhangatle/article/details/77447653 ...

  9. 痞子衡嵌入式:飞思卡尔i.MX RTyyyy系列MCU外设那些事(2)- 善变的FlexRAM

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是飞思卡尔i.MX RTyyyy系列MCU的FlexRAM外设. 本文是外设系列第二篇,上一篇讲的是离内核最近的高速缓存L1 Cache, ...

  10. 杨柳絮-Info:春天将不再漫天飞“雪”,济源治理杨柳絮在行动

    ylbtech-杨柳絮-Info:春天将不再漫天飞“雪”,济源治理杨柳絮在行动 1.返回顶部 1. 天气暖和了,连心情都是阳光的.然而,在这美好的时刻,漫天飞舞的杨柳絮,甚是煞风景.<ignor ...