单表查询之神奇的双下划线: 单表查询之神奇的双下划线 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__c…
django models 在日常的编程中,我们需要建立数据库模型 而往往会用到表与表之间的关系,这就比单表取数据要复杂一些 在多表之间发生关系的情形下,我们如何利用models提供的API的特性获得需要的数据呢 ==我们先从对象和查询集说开去== 查询结果有时是对象/有时是查询集 我们只需要知道 ,只有get方法或者对查询集合进行切片,比如objects.all()[0] 或者 objects.all().first()等得到的是对象,其他得到的都是queryset 我们举个例子看下 # -*…
from django.test import TestCase # Create your tests here. import os import sys if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE", "day53.settings") import django django.setup() from app01 import model…
Django测试环境搭建 ps: 1.pycharm连接数据库都需要提前下载对应的驱动 2.自带的sqlite3对日期格式数据不敏感 如果后续业务需要使用日期辅助筛选数据那么不推荐使用sqlite3 方式1: 任意创建一个py文件,在该文件内书写固定的配置 import os if __name__ == '__main__': os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'djangoProject2.settings') import dj…
一.外键使用 在 MySQL 中,如果使用InnoDB引擎,则支持外键约束.(另一种常用的MyIsam引擎不支持外键) 定义外键的语法为fieldname=models.ForeignKey(to_class,on_delete=' ',options),第一个参数表示引用哪个模型,第二个参数表示如果外键引用的模型删除,该字段对应的的值应该怎么处理,第三个语法为其他字段参数. django ORM模型常用的on_delete的值 models.CASCADE:级联删除,即外键对应的那条数据删除了…
#====================================双下划线的跨表查询===============# 前提 此时 related_name=bookList 属性查询: # 查询linux这本书的出版社的地址? # linux_obj=models.Book.objects.filter(title="linux").first() # print(linux_obj.publish.name) # # # 查询老男孩出版社出版过的所有书籍的名字与价格 # #…
必知必会13条 <1> all(): 查询所有结果 <2> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误. <3> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 <5> values(*field): 返回一个ValueQuerySet——一个特殊的Q…
测试脚本配置 ''' 当你只是想测试django中的某一个文件内容 那么你可以不用书写前后端交互的形式而是直接写一个测试脚本即可 脚本代码无论是写在应用下的test.py还是单独开设py文件都可以 ''' # 测试环境的准备 去manage.py中拷贝前四行代码到测试文件 然后自己写两行 impor…
MVC M: model 模型 与数据库交互 V: view 视图 HTML C:controller 控制器 流程 和 业务逻辑 MTV M:model ORM T:template 模板 HTML V:view 视图 业务逻辑 Django中的视图 FBV  def add_publisher(request,*args,**kwargs):  # 逻辑  return  response urls.py   url(r'^add_publisher',add_publisher ) CBV…
自定义第三张表的好处:可以定义多个字段, 缺点:查询不方便(有方法解决) 1.第三张表设置外键,联合唯一(查询不方便) class Books(models.Model): name=models.CharField(max_length=32) price=models.DecimalField(max_digits=6,decimal_places=2)class Zuozhes(models.Model): name=models.CharField(max_length=32) sex=…
0 图书相关表关系建立 1.5个表 2.书籍表,作者表,作者详情表(垂直分表),出版社表,书籍和作者表(多对多关系) 一对一 多对多 本质都是一对多 外键关系 3.一对一的关系,关联字段可以写在任意一方 4.一对多的关系,关联字段写在多的一方 5.多对多的关系,必须建立第三张表(orm中,可以用一个字段表示,这个字段可以写在任意一方) 6 把表关系同步到数据库中 -python manage.py makemigrations # 在migrations文件夹下记录一下 -python mana…
返回ORM目录 Django ORM 内容目录: 一. 基于对象的表查询 二. 基于双下划线的查询 三. 聚合查询 aggregate 四. 分组查询 annotate 一. 基于对象的表查询 1.正向查询 --> 意思是从含有外键表查询其外键对应的表的字段值 --> 正向查询容易推导 (1)查询书籍是三国演义的出版社邮箱 book_obj = models.Book.objects.filter(title='三国演义').first() 结果:123.qq.com (2)查询书籍是 活着…
Django ORM中常用的字段和参数 常用字段 AutoField int自增列,必须填入参数 primary_key=True.当model中如果没有自增列,则自动会创建一个列名为id的列. IntegerField 一个整数类型,范围在 -2147483648 to 2147483647.(一般不用它来存手机号(位数也不够),直接用字符串存,) CharField 字符类型,必须提供max_length参数, max_length表示字符长度. DateField 日期字段,日期格式  Y…
 创建表结构 from django.db import models class Book(models.Model): title=models.CharField(max_length=32) publishDate=models.DateField() price=models.DecimalField(max_digits=5,decimal_places=2) # 出版社可以发布多部书(一对多) publish=models.ForeignKey('Publish') # 一个人可以…
单表查询 补充一个知识点:在models.py建表是 create_time = models.DateField() 关键字参数: 1.auto_now:每次操作数据,都会自动刷新当前操作的时间 2.auto_now_add:在创建数据的时候,会自动将创建的时间记录下来,后续的修改不影响该字段 增.删.改.查 增 方式1:create book_obj =models.Book.objects.create(title='三国',price=19.99,create_time='2019-11…
目录 多表操作:增删改,基于对象/双下划线的跨表查询.聚合查询.分组查询.F查询与Q查询 一.创建多表模型 二.一对多增删改表记录 1.一对多添加记录 2.一对多删除记录 3.一对多修改记录 三.一对一增删改记录 四.多对多增删改记录 1.多对多增加记录 2.多对多删除记录 3.多对多清空记录 4.多对多修改记录 五.基于对象的跨表查询--多次查询.子查询 正向查询和反向查询 1.一对一基于对象的跨表查询 2.一对多基于对象的跨表查询 3.多对多基于对象的跨表查询 六.基于双下划线的跨表查询 1…
一: 基于对象的跨表查询 1. 一对一 正向: 反向: 2. 一对多 正向: 反向: 3.多对多 正向: 反向: 4.*****基于对象的多表查询 二: 基于双下划线的多表查询 1. 连表查询 一对一双下划线查询 -正向: -反向:…
在Python脚本中调用Django环境. import osif __name__ == '__main__': os.environ.setdefault("DJANGO_SETTINGS_MODULE", "工程名.settings") import django django.setup() from app01 import models 1 创建多表模型(详情见代码)  #用了OneToOneField和ForeignKey,模型表的字段,后面会自定加_…
基于对象的跨表查询是子查询 基于双下划线的查询是连表查询 PS:基于双下划线的跨表查询 正向按字段,反向按表名小写 一对一 需求:查询lqz这个人的地址# 正向查询ret = models.Author.objects.filter(name='lqa').values('author_detail__addr') #Author表作为基表,然后从基表中查到人名,然后从Authonr表跨到author_detail表中获取name对应的addr字段ret = models.Author.obje…
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 xxx 八 xxx 一 创建模型 表和表之间的关系 一对一.多对一.多对多 ,用book表和publish表自己来想想关系,想想里面的操作,加外键约束和不加外键约束的区别,一对一的外键约束是在一对多的约束上加上唯一约束. 实例:我们来假定下面这些概念,字段和关系 作者模型:一个作者有姓名和年龄.…
一.基于双下划线的跨表查询 Django 还提供了一种直观而高效的方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系.要做跨关系查询,就使用两个下划线来链接模型(model)间关联字段的名称,直到最终链接到你想要的model 为止. 核心得学会通知ORM引擎什么时候,join哪张表 join看似复杂,实则最简单.因为把字段列出来之后,就相当于单表操作了!想怎么取值都可以! 正向查询按字段,反向查询按表名小写用来告诉ORM引擎join哪张表 返回值是QuerySet…
一.基于双下划线的跨表查询 Django 还提供了一种直观而高效的方式在查询(lookups)中表示关联关系,它能自动确认 SQL JOIN 联系.要做跨关系查询,就使用两个下划线来链接模型(model)间关联字段的名称,直到最终链接到你想要的 model 为止.(相当于用sql语句用join连接的方式,可以在settings里面设置,可查看sql语句) 数据库模型: class Book(models.Model): nid = models.AutoField(primary_key=Tru…
一.创建多表模型 一对一:OneToOneField 一对多:ForeignKey 多对多:ManyToManyField 创建表时,会自动添加一个nid字段,并且自增,所以id可以不用手动创建 OneToOneField和ForeignKey会自动在后面加上" _id " ManyToManyField会自动创建第三张表 创建表的类,OneToOneField.ForeignKey和ManyToManyField中的to后的主表,1.如果用双引号包裹,那么创建主表的类在上在下都可以…
一..基于双下划线的跨表查询(join实现) key:正向查询按字段,反向查询按表明小写 1.一对多跨表查询 查询在跨表中可以有两种方式,正向查询就是关键字段在你要搜索的表,没有关键字段就是反向查询 跨表查询的显著特点是__双下划线,这道题中在你要找到name,但是Book中没有,通过正向查询关键字段+__来 跨表找到name ret=Book.objects.filter(title="python").values("publish__name") # prin…
一.多表操作 一对多字段的增删改(book表和publish表是一对多关系,publish_id字段) 增  create publish_id 传数字   (publish_id是数据库显示的字段名) models.Book.objects.create(title='三国演义',price=200,publish_id=1) #publish_id是mysql数据库中显示的字段名 publish直接传出版社对象    publish是models.py设计表字段名 #查询到的publish表…
前期准备: 创建表 class Book(models.Model): title = models.CharField(max_length=32) price = models.DecimalField(max_digits=8,decimal_places=2) publish_time = models.DateField(auto_now_add=True) #该字段新增数据会自动添加实时时间 #出版社 一对多 外键字段建在多的一方 publish = models.ForeignKe…
前面篇随笔写的是基于对象的跨表查询:对象.objects.filter(...)  对象.关联对象_set.all(...)  -->反向 基于对象的跨表查询例如: book_obj= Book.objects.filter(id=4).first() #注意多了个first print(book_obj) #go 这里得到的是一个models对象 print(book_obj.publish.name) #桔子出版社 这篇随笔主要写的是基于双下划线的跨表查询,其本质是使用join连接其他表进行…
一.多表的创建 from django.db import models # Create your models here. class Author(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32) age = models.IntegerField() au = models.OneToOneField(to='AuthorDetail',to_fiel…
昨日内容回顾 # 一对多的添加方式1(推荐) # book=Book.objects.create(title="水浒传",price=100,pub_date="1643-4-12",publish_id=1) # print(book.title) # 一对多的添加方式2 # publish必须接受一个对象 # xigua=Publish.objects.filter(name="西瓜出版社").first() # book=Book.obj…
昨日内容回顾 # 一对多的添加方式1(推荐) # book=Book.objects.create(title="水浒传",price=100,pub_date="1643-4-12",publish_id=1) # print(book.title) # 一对多的添加方式2 # publish必须接受一个对象 # xigua=Publish.objects.filter(name="西瓜出版社").first() # book=Book.obj…