17-2 orm单表操作和多表操作

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

一  ORM单表操作

1 增删改查

 1 1. 查询
 2 1. 查所有
 3 models.Publisher.objects.all()
 4 2. 查某个具体的记录
 5 models.Publisher.objects.get(id=1) --> 注意查询条件不成立就报错
 6 2. 删除一条记录
 7 models.Publisher.objects.get(id=1).delete()
 8 3. 创建一条记录
 9 models.Publisher.objects.create(name="新出版社名字", addr="出版社地址")
10 4. 修改一条记录
11 obj = models.Publisher.objects.get(id=1)
12 obj.name = "新名字"
13 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 单表查询双下划线操作

例子:

 1 models.Tb1.objects.filter(id__lt=10, id__gt=1)   # 获取id大于1 且 小于10的值
 2
 3 models.Tb1.objects.filter(id__in=[11, 22, 33])   # 获取id等于11、22、33的数据
 4 models.Tb1.objects.exclude(id__in=[11, 22, 33])  # not in
 5
 6 models.Tb1.objects.filter(name__contains="ven")  # 获取name字段包含"ven"的
 7 models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感
 8
 9 models.Tb1.objects.filter(id__range=[1, 3])      # id范围是1到3的,等价于SQL的bettwen and
10
11 类似的还有:startswith,istartswith, endswith, iendswith 
12
13 date字段还可以:
14 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. 基于对象的查询
# 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)

# 反向查询

# 1. 由出版社反向查询书籍(基于对象的查询)
# publisher_obj = models.Publisher.objects.get(id=2) # 找到张江出版社
# 张江出版社出版的所有书籍
# ret = publisher_obj.book_set.all()
# print(ret)

# 2. 基于queryset的双下划线
# 江出版社出版的所有书籍的书名
ret = models.Publisher.objects.filter(id=2).values_list("book__title")
print(ret)

原文地址:https://www.cnblogs.com/huningfei/p/9466679.html

时间: 2024-10-22 23:34:57

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

ORM 单表操作查询 多表操作查询及增删改查

------------------------------------------只有对前途乐观的人,才能不怕黑暗,才能有力量去创造光明.乐观不是目的,而是人生旅途中的一种态度. 多表操作 创建模型 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄. 作者详细模型:把作者的详情放到详情表,包含生日,手机号,家庭住址等信息.作者详情模型和作者模型之间是一对一的关系(one-to-one) 出版商模型:出版商有名称,所在城市以及email. 书籍模型: 书籍有书名和出版日期

ORM单表操作

本文目录 一.ORM简介 二.全局配置 三.搞搞搞 一.ORM简介 .ORM是“对象-关系-映射”的简称 .MVC或者MTV框架中包括一个重要的部分,就是ORM,它实现了数据模型与数据库的解耦,即数据模型的设计不需要依赖于特定的数据库,通过简单的配置就可以,轻松更换数据库,这极大的减轻了开发人员的工作量,不需要面对因数据库变更而导致的无效劳动. 二.全局配置 .单表是相对简单的Django项目,我们再次进行对单表的增删改查操作,话不多说,项目开始. 1.setting.py 文件配置静态路径.

Django框架05 /orm单表操作

目录 Django框架05 /orm单表操作 昨日内容回顾 今日内容 orm单表操作 对象关系映射(object relational mapping) 1.orm介绍 2.增: 3.时间问题 4.删 5.改 6.批量插入 -- bulk_create 7.查询api 8.基于双下划线的模糊查询 -- filter双下划线查询 9.总结 总结1 总结2 Django框架05 /orm单表操作 昨日内容回顾 模板相关 模板继承(母版继承) 1. 创建一个xx.html页面(作为母版,其他页面来继承

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

12.329 orm单表查询 import os if __name__ == '__main__': # 指定当前py脚本需要加载的Django项目配置信息 os.environ.setdefault("DJANGO_SETTINGS_MODULE", "orm_demo.settings") import django django.setup() # 启动Django项目 from app01 import models #返回QuerySet对象的方法: r

DJango周总结二:模型层,单表,多表操作,连表操作,数据库操作,事务

django周复习二 1,模型层:  1单表操作:   13个必会操作总结    返回QuerySet对象的方法有    all()    filter()    exclude()    order_by()    reverse()    distinct()    特殊的QuerySet    values()       返回一个可迭代的字典序列    values_list() 返回一个可迭代的元祖序列    返回具体对象的    get()    first()    last() 

这些HTML、CSS知识点,面试和平时开发都需要 No8-No9(知识点:媒体操作、构建表单)

系列知识点汇总 这些HTML.CSS知识点,面试和平时开发都需要 No1-No4(知识点:HTML.CSS.盒子模型.内容布局) 这些HTML.CSS知识点,面试和平时开发都需要 No5-No7(知识点:文字设置.设置背景.数据列表) 这些HTML.CSS知识点,面试和平时开发都需要 No8-No9(知识点:媒体操作.构建表单) 这些HTML.CSS知识点,面试和平时开发都需要 No10-No11(知识点:表格操作.代码编写规则) No8.媒体操作 1.增加图片 (1)img元素:自包含元素,不

Django使用普通表单、Form、以及modelForm操作数据库方式总结

Django使用普通表单.Form.以及modelForm操作数据库主要应用于增删该查的情景下,流程通用如下,只是实现方式不一样: 进入填写表单页面: 在表单页面填写信息,并提交: 表单数据验证 验证成功,和数据库进行交互(增删改查): 验证成功,页面提示表单填写失败: 一.Django使用普通表单操作数据库 1.html代码: <form action="/add/" method="post" name="addbook"> {%

08.16号 dom 节点的创建 和删除DOM表单与非表单取值的方法 和操作属性与操作样式

<html> <head> <meta charset="utf-8"> <title>Dom操作</title> <script type="text/javascript" src="08.16/08.16.js"></script> </head> <body> <!--dom节点添加 删除 ; createElemen 创建一

07-查询操作(DQL)-多表查询

一. 综述   查询操作主要从两个方面来说:单表查询和多表查询. 多表查询包括:笛卡尔积.外键约束.内连接查询.外链接查询.自连接查询. 二 . 案例设计   1.  设计产品表(product).包括:主键id.产品名称(productName).分类编号(dir_id).零售价(salePrice).供应商(supplier).品牌(brand).折扣(cutoff).成本价(costPrice). 设计产品产品编号表( productdir). 包括:主键id.编号名称( dirName)