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 关键的更多相关文章

  1. day56_9_20orm中的关键字段,orm查询13方法整合,查询优化和事务。

    一.常用字段. 在orm中有一些字段是常用字段: 1.AutoField 这个字段是自增的,必须填入参数primary_key=True,也就是说这个字段是表的主键,如果表类中没有自增列,就会自动创建 ...

  2. 终于等到你:CYQ.Data V5系列 (ORM数据层)最新版本开源了

    前言: 不要问我框架为什么从收费授权转到免费开源,人生没有那么多为什么,这些年我开源的东西并不少,虽然这个是最核心的,看淡了就也没什么了. 群里的网友:太平说: 记得一年前你开源另一个项目的时候我就说 ...

  3. 架构从最简单的数据访问框架(ORM)到资源调度和治理中心(SOA)说起

    随着互联网的发展,网站应用的规模不断扩大,常规的垂直应用架构已无法应对,分布式服务架构以及流动计算架构势在必行,亟需一个治理系统确保架构有条不紊的演进. 单一应用架构当网站流量很小时,只需一个应用,将 ...

  4. Django ORM、一对一、一对多、多对多、详解

    上篇博客也提到这些知识点,可能大家还是不太清楚,这篇博客为大家详细讲解ORM中的几个知识点 1.1首先我们先看一个小案例: #_*_coding:utf-8_*_ from django.db imp ...

  5. 冰冻三尺非一日之寒-mysql(orm/sqlalchemy)

    第十二章  mysql ORM介绍    2.sqlalchemy基本使用 ORM介绍: orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似pyt ...

  6. Rafy 领域实体框架设计 - 重构 ORM 中的 Sql 生成

    前言 Rafy 领域实体框架作为一个使用领域驱动设计作为指导思想的开发框架,必然要处理领域实体到数据库表之间的映射,即包含了 ORM 的功能.由于在 09 年最初设计时,ORM 部分的设计并不是最重要 ...

  7. 自己动手写ORM的感受

    之前看到奋斗前辈和时不我待前辈的自己动手写ORM系列博客,感觉讲解的通俗易懂,清晰透彻.作为一个菜鸟,闲来也想着自己写一个ORM,一来加深自己对 ORM的理解,以求对EF,NHibernate等ROM ...

  8. 吉特仓库管理系统-ORM框架的使用

    最近在园子里面连续看到几篇关于ORM的文章,其中有两个印象比较深刻<<SqliteSugar>>,另外一篇文章是<<我的开发框架之ORM框架>>, 第一 ...

  9. Python开发【十二章】:ORM sqlalchemy

    一.对象映射关系(ORM) orm英文全称object relational mapping,就是对象映射关系程序,简单来说我们类似python这种面向对象的程序来说一切皆对象,但是我们使用的数据库却 ...

随机推荐

  1. cmd 命令 记忆

    1,“开始”—>“运行”,输入cmd,回车.<或 win+R> 2,出现“命令提示符”的窗口,一般情况下是 C:\Documents and Settings\Administrat ...

  2. json数据结构

    JSON即JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合服务器与JavaScript的交互.JSON易于人阅读和编写.同时也易于机器解析和生成.JSON采 ...

  3. 一个linux命令(6/13):traceroute命令

    通过traceroute 我们可以知道信息从你的计算机到互联网另一端的主机是走的什么路径.当然每次数据包由某一同样的出发点(source)到达某一同样的目的地(destination)走的路径可能会不 ...

  4. 手动创建sql数据表

    createtable  tb (    ID   int IDENTITY (1,1)     notnull, --创建列ID,并且每次新增一条记录就会加1    WokNo            ...

  5. python继承,判断类型,多态

    1.python中继承 如果已经定义了Person类,需要定义新的Student和Teacher类时,可以直接从Person类继承: class Person(object): def __init_ ...

  6. Linux系统crontab定时调度Python脚本

    Linux系统crontab定时调度Python脚本 一.Python脚本随Linux开机自动运行 #Python脚本:/home/edgar/auto.py #用root权限编辑以下文件:/etc/ ...

  7. Mysql 忘记密码处理配置

    Mysql忘记密码处理 1.设置mysql密码 mysqladmin -uroot password ‘密码’ 2.主配置文件下取消密码授权 vim /etc/my.cnf 注:加入skip-gran ...

  8. js 的编译

    js和其他语言一样,也是需要编译的,代码编译发生在代码执行之前,js代码的编译会经历如下几个阶段 1.分词,词法分析  这个过程会将由字符串组成的字符分解成有意义的代码块,这些代码块称为词法单元,例如 ...

  9. ggplot2 specific command

    # By default, the same scales are used for all panels. You can allow # scales to vary across the pan ...

  10. C++ 之虚函数的实现原理

    c++的多态使用虚函数实现,通过“晚绑定”,使程序在运行的时候,根据对象的类型去执行对应的虚函数. C++ 之虚函数的实现原理 带有虚函数的类,编译器会为其额外分配一个虚函数表,里面记录的使虚函数的地 ...