ORM 关键
1. 老师的增删改查
1. teacher_obj.cid.add(*[1, 2, 3]) 添加(必须打散)
2. teacher_obj.cid.set([1, 2, 3]) 设置(不用打散) 2. 查询练习
1. 单表查询 只在一张表里查各种字段
obj.属性(字段)
2. 一对多(外键)和一对一
正向:
从写外键或一对一的表开始查 叫 正向查
obj.外键(一对一).属性
反向查:
1. 一对多
obj.表名_set
2. 一对一
obj.表名
3. 多对多 正向查:
从写多对多的表开始查 叫 正向查
obj.多对多字段名.all() --> QuerySet()
反向查:
obj.表名_set.all() --> QuerySet() 4. 双下划线 表示跨表查询
正向:
1. 关联的字段名__另外一张表的字段名
反向:
1. 另外一张表的表名__另外一张表的字段名 5. 聚合
aggregate() from django.db.models import Avg, Max, Min, Count, Sum # 求最贵的那本书
models.Book.objects.all().aggregate(max_price=Max("price")) 6. 分组
annotate() # 将所有的书按作者分组,统计每个作者最贵的书
models.Author.objects.all().annotate(author_max=Max("books__price"))
最后得到的是一个QuerySet()对象,里面的每个数据对象都多了一个author_max字段 7. F
查询条件是字段间的比较 查询所有购买数大于收藏数的商品
models.Goods.objects.filter(buy_num__gt=F("keep_num")) 扩展的两个:
1. 将每个商品的购买数+1000
models.Goods.objects.all().update(buy_num=F("buy_num")+1000)
2. 将所有商品的名字前面加上 “特价”
from django.db.models.functions import Concat
from django.db.models import Value models.Goods.objects.filter().update(name=Concat(Value("特价"), F("name"))) 8. Q
相当于取出子集和 Q(条件1) | Q(条件2)
Q(条件1) & Q(条件2)
Q(条件1) & ~Q(条件2) 当Q查询和关键字查询都有的时候,Q查询要写在前面
models.Book.objects.filter(Q(title__contains="物语")|Q(publish_day__year=2017),price__lt=9) 9. 常用字段 10. 字段参数
null
max_length
default
unique
primary_key 时间字段相关:
auto_now_add 创建这条数据时自动加当前时间
auto_now 每一次修改都更新时间 关系字段:
related_name
to
to_field 11. 所有QuerySet方法 1. select_realated(关系字段)
一对一或多对一查询时用这个 2. prefetch_realated()
多对多和一对多时用这个 3. 批量创建 提前把数据对象生成,
data = [obj1, obj2, obj3]
bulk_create(data, 10)
4. 执行额外SQL语句
Entry.objects.extra(select={'new_id': "select col from sometable where othercol > %s"}, select_params=(1,)) 5. 直接执行原生SQL(和pymysql类似)
拿到连接,获取光标,执行SQL语句
from django.db import connection, connections
cursor = connection.cursor() # cursor = connections['default'].cursor()
cursor.execute("""SELECT * from auth_user where id = %s""", [1])
row = cursor.fetchone()
ORM 关键的更多相关文章
- day56_9_20orm中的关键字段,orm查询13方法整合,查询优化和事务。
一.常用字段. 在orm中有一些字段是常用字段: 1.AutoField 这个字段是自增的,必须填入参数primary_key=True,也就是说这个字段是表的主键,如果表类中没有自增列,就会自动创建 ...
- 终于等到你:CYQ.Data V5系列 (ORM数据层)最新版本开源了
前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说 ...
- 架构从最简单的数据访问框架(ORM)到资源调度和治理中心(SOA)说起
随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构当网站流量很小时,只需一个应用,将 ...
- Django ORM、一对一、一对多、多对多、详解
上篇博客也提到这些知识点,可能大家还是不太清楚,这篇博客为大家详细讲解ORM中的几个知识点 1.1首先我们先看一个小案例: #_*_coding:utf-8_*_ from django.db imp ...
- 冰冻三尺非一日之寒-mysql(orm/sqlalchemy)
第十二章 mysql ORM介绍 2.sqlalchemy基本使用 ORM介绍: orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似pyt ...
- Rafy 领域实体框架设计 - 重构 ORM 中的 Sql 生成
前言 Rafy 领域实体框架作为一个使用领域驱动设计作为指导思想的开发框架,必然要处理领域实体到数据库表之间的映射,即包含了 ORM 的功能.由于在 09 年最初设计时,ORM 部分的设计并不是最重要 ...
- 自己动手写ORM的感受
之前看到奋斗前辈和时不我待前辈的自己动手写ORM系列博客,感觉讲解的通俗易懂,清晰透彻.作为一个菜鸟,闲来也想着自己写一个ORM,一来加深自己对 ORM的理解,以求对EF,NHibernate等ROM ...
- 吉特仓库管理系统-ORM框架的使用
最近在园子里面连续看到几篇关于ORM的文章,其中有两个印象比较深刻<<SqliteSugar>>,另外一篇文章是<<我的开发框架之ORM框架>>, 第一 ...
- Python开发【十二章】:ORM sqlalchemy
一.对象映射关系(ORM) orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却 ...
随机推荐
- Visual Studio2012打不开MVC2.0以及1.0项目如何处理
/*打开扩展名为csproj的工程文件*/ <ProjectTypeGuids> {F85E285D-A4E0---AB1D724D3325};{349c5851-65df-11da--0 ...
- webservice -- cxf客户端调用axis2服务端
背景: 有个项目, 需要由第三方提供用户信息, 实现用户同步操作, 对方给提供webservice接口(axis2实现)并也使用axis2作主客户端调用我方提供的webservice接口 起初, 由于 ...
- Java Web专题
- linux centos7 安装zookeeper
linux 系统下 zookeeper 安装教程 1.下载安装包 1)进入安装目录 cd /home/install/ 2)下载 wget http://mirror.bit.edu.cn/apach ...
- HashMap的简单源码分析(看了大佬的源码,基于1.7) put方法
参考博客: https://blog.csdn.net/eson_15/article/details/51158865 hashMap中的几个关键属性 //默认初始容量是16,必须是2的幂 stat ...
- 【Thinking in java, 4e】复用类
mark一篇09年的<Thinking in Java>笔记:here --> https://lawrence-zxc.github.io/2009/11/07/thinking- ...
- Linux下MySQL 5.6.24的编译安装与部署
MySQL 5.6正式版发布了,相对于5.5版本作出了不少改进,其源码安装配置方式也有所变化,本文根据实际操作,不断尝试,精确还原了安装的具体步骤. 在Linux下安装MySQL前,先确认卸载系统自带 ...
- Spring积累
<tx:annotation-driven/> (Spring的XML配置里两大Bean的声明之一) 那我们是否就可以在程序中所有被spring管理的类(@Controller.@Ser ...
- Pandas面板(Panel)
面板(Panel)是3D容器的数据.面板数据一词来源于计量经济学,部分源于名称:Pandas - pan(el)-da(ta)-s. 3轴(axis)这个名称旨在给出描述涉及面板数据的操作的一些语义. ...
- datetimepicker
<!DOCTYPE html> <html> <head> <title></title> <link href="./bo ...