ORM之基本操作增删改查

  在函数前,先导入要操作的数据库表模块,model

  from model所在的路径文件夹 import model

在views文件中,加的路径:

#就一个app01功能的文件,在app01的文件下,在app01的views里加
from app01 import model
#在有路由分发的项目中:AutoCMDB项目里的集成所有的功能的apps文件里找到具体的功能包。
from apps.cases import model

增操作:(create) 

def index(request):
model.UserGroup.objects.create(tilte='销售部')
#在UserGroup表中添加title值销售部 
model.UserInfo.objects.create(username='george',password='',usergroup_id=1)
   #在UserGroup表中添加username,password,age,ug_id

查操作:(all、filter)

def index(request):
  group_list = model.UserGroup.objects.all()
  #将UserGroup表的所有数据拿到,起别名group_list。
  group_list = model.UserGroup.objects.filter(id=1)
  #将UserGroup表的所有数据拿到,过滤id=1的值,并放入别名group_list中。
  group_list = model.UserGroup.objects.filter(id__gt=1)
  #将UserGroup表的所有数据拿到,过滤id大于1的值,并放入别名group_list中。
  group_list = model.UserGroup.objects.filter(id__lt=1)
  #将UserGroup表的所有数据拿到,过滤id小于1的值,并放入别名group_list中。
def index(request):
group_list = models.UserGroup.objects.all()
print(group_list) # 这个列表是一个QuerySet类型的列表,里面是一个个的对象,用for循环可以取到里面的值。
#可以循环group_list里的数据,因为拿到的是列表。
for row in group_list:
print(row.id,row.title)

删操作:(delete)

def index(request):
model.UserGroup.objects.filter(id=2).delete()
  #将UserGroup表中的id=2的那列数据删除 

改操作:(update)

def index(request):
model.UserGroup.objects.filter(id=2).update(title='技术部')
#将UserGroup表中的id=2的那列的title的值改为技术部

 其他操作:

  排序操作:.order_by( )

  view的函数:

def testtest(request):
"""
排序操作
:param request:
:return:
"""
user_list = models.UserInfo.objects.all()
user_list1 = models.UserInfo.objects.all().order_by("id") #order_by是排序,参数是字段,比如加id字段,会按正序排列,从小到大
user_list2 = models.UserInfo.objects.all().order_by("-id") #加负号会按倒序排列,从大到小
user_list3 = models.UserInfo.objects.all().order_by("-id","name") #如果id有重复的,那么就按name进行排序,也是按从小到大,如果name也叫负号,那么也是从大到小
print(user_list)
print(user_list1)
return render(request,"index.html",{"user_list":user_list,"user_list1":user_list1})

  models的类:

class UserInfo(models.Model):
name = models.CharField(max_length=255)
age = models.IntegerField()
ut = models.ForeignKey("UserType") def __str__(self):
return "%s_%s" %(self.id,self.name)

  分组操作:比如根据ut的id来进行分组,计算每组的人数。 annotate()

       但是分组是要加聚合条件的。

       from django.db.models import Count,Sun,Max,Min

  views的函数:

def testtest1(request):
"""
分组操作
:param request:
:return:
"""
from django.db.models import Count
user_list = models.UserInfo.objects.values("ut_id").annotate(xxx=Count("id")) # xxx就是个别名
#这样会把ut_id一样的分为一类
print(user_list.query) #用.query是打印查看user_list生成的SQL语句    

  生成的SQL语句:

  如果是加条件的话views函数是:

def testtest1(request):
"""
分组操作
:param request:
:return:
"""
from django.db.models import Count
user_list = models.UserInfo.objects.values("ut_id").annotate(xxx=Count("id")).filter(xxx__gt=2)
#这样依旧可以加条件,条件的参数可以写实例中的别名大于2的值,在SQL中就是having操作。
  
   print(user_list.query) #用.query是打印查看user_list生成的SQL语句
   return HTTPResponse("...") 

  加filter条件的SQL:

  filter 在前和在后是不一样的,在前的话或找不到xxx别名的参数,但他可以找到Count("id") 的id。

  filter 在前表示是where条件。filter前后都有,就先进行一次筛选出需要的数据,在进程分组,最后在进行一次筛选。

def testtest1(request):
"""
分组操作
:param request:
:return:
"""
from django.db.models import Count user_list = models.UserInfo.objects.filter(id__gt=2).values("ut_id").annotate(xxx=Count("id")).filter(xxx__gt=2)
#第一个filter先进行id大于2的筛选,然后在根据ut_id进行分组,分完组根据Count 的id 进行大于2的筛选。
print(user_list.query) #用.query是打印查看user_list生成的SQL语句

  其他操作:

    models.UserInfo.objects.filter(id__lte=1) # lte和gte 分别是小于等于和大于等于
models.UserInfo.objects.filter(id__gte=1) # lte和gte 分别是小于等于和大于等于
models.UserInfo.objects.filter(id__in=[1,2,3]) # in 就必须传一个列表, 这是条件id在1,2,3里面的
models.UserInfo.objects.filter(id__range=[1,3]) # range是一个范围
models.UserInfo.objects.filter(name__startswith="xxx")
models.UserInfo.objects.filter(name__contains="xxx") #包含xxx的数据 #exclude是排除,除它以外的。
models.UserInfo.objects.exclude(id=1) # id不等于1
1. 增
create(name='xx',age='xx'.....)
dic={name"xxx,age}
create(**dic) 2. 更新
models.xx.objects.filter(id=1).update(a=1,b=2) models.xx.objects.filter(id=1).update(**dic) 3. 查询
models.xx.objects.filter(id=1,xxx)
models.xx.objects.filter(**{'id':1,'name':'alex'}) PS: Django帮助我们数据转换 -> 字典 =》 Form组件(用户请求规则验证+数据字典)

select_related 和 prefetch_related:

        ====================================================
# q = models.UserInfo.objects.all()
# select * from userinfo
# select * from userinfo inner join usertype on ...
# for row in q:
# print(row.name,row.ut.title) # select_related: 查询主动做连表
q = models.UserInfo.objects.all().select_related('ut','gp')
# select * from userinfo
# select * from userinfo inner join usertype on ...
for row in q:
print(row.name,row.ut.title) # prefetch_related: 不做连表,做多次查询
q = models.UserInfo.objects.all().prefetch_related('ut')
# select * from userinfo;
# Django内部:ut_id = [2,4]
# select * from usertype where id in [2,4]
for row in q:
print(row.id,row.ut.title) ====================================================
class Boy(models.Model):
name = models.CharField(max_length=32) class Girl(models.Model):
nick = models.CharField(max_length=32) class Love(models.Model):
b = models.ForeignKey('Boy')
g = models.ForeignKey('Girl')

===================================================== # 1. 和george有关系的姑娘
# obj = models.Boy.objects.filter(name='george').first()
# love_list = obj.love_set.all()
# for row in love_list:
# print(row.g.nick)
#
#
# love_list = models.Love.objects.filter(b__name='george')
# for row in love_list:
# print(row.g.nick)
#
# love_list = models.Love.objects.filter(b__name='george').values('g__nick')
# for item in love_list:
# print(item['g__nick'])
#
# love_list = models.Love.objects.filter(b__name='george').select_related('g')
# for obj in love_list:
# print(obj.g.nick) 1. ManyToManyField
        可以创建一个第三张表 2. 自定义关系表 3. 杂交 class Boy(models.Model):
name = models.CharField(max_length=32)
m = models.ManyToManyField('Girl',through="Love",through_fields=('b','g',))
# 查询和清空 class Girl(models.Model):
nick = models.CharField(max_length=32)
# m = models.ManyToManyField('Boy') class Love(models.Model):
b = models.ForeignKey('Boy')
g = models.ForeignKey('Girl') class Meta:
            """
            联合唯一索引:unique_together 使b和g的相同的id组合只能出现一次
            """
unique_together = [
('b','g'),
]

  关于更多models操作,借鉴url:www.cnblogs.com/wupeiqi/articles/6216618.html

 -------------- END ------------

  

ORM之单表增删改查的更多相关文章

  1. Django框架(八)--单表增删改查,在Python脚本中调用Django环境

    一.数据库连接配置 如果连接的是pycharm默认的Sqlite,不用改动,使用默认配置即可 如果连接mysql,需要在配置文件中的setting中进行配置: 将DATABASES={} 更新为 DA ...

  2. Django框架(九)—— 单表增删改查,在Python脚本中调用Django环境

    目录 单表增删改查,在Python脚本中调用Django环境 一.数据库连接配置 二.orm创建表和字段 三.单表增删改查 1.增加数据 2.删除数据 3.修改数据 4.查询数据 四.在Python脚 ...

  3. $Django orm增删改字段、建表 ,单表增删改查,Django请求生命周期

    1 orm介绍  ORM是什么   ORM 是 python编程语言后端web框架 Django的核心思想,“Object Relational Mapping”,即对象-关系映射,简称ORM.  一 ...

  4. Django ORM基本的单表增删改查

    创建表 步骤: 1.app下models.py里创建类(继承models.Model) from django.db import models class UserInfo(models.Model ...

  5. mysql数据库单表增删改查命令

    数据库DB-database-mysql 课程安排 第一天: 1.数据库定义以及设计 2.mysql服务端的安装 3.mysql-dos操作 库的操作 表的操作 4.mysql客户端navicate工 ...

  6. MySQL初步理解,简易单表增删改查

    什么是数据库? 存储数据的仓库,本质是一个文件系统,封装了算法和文件之前数据的存储模式 阶段1:集合 数组 变量 缺点:数据存储在内存中,不能实现数据的持久化存储 阶段2:IO流 结合文件 .txt ...

  7. Django ORM字段类型 单表增删改查 万能的双下划线

    1.ORM三种模型 模型之间的三种关系:一对一,一对多,多对多. 一对一:实质就是在主外键(author_id就是foreign key)的关系基础上,给外键加了一个UNIQUE=True的属性: 一 ...

  8. django(七)之数据库表的单表-增删改查QuerySet,双下划线

    https://www.cnblogs.com/haiyan123/p/7738435.html https://www.cnblogs.com/yuanchenqi/articles/6083427 ...

  9. Django ORM 实现数据的单表 增删改查

    一.配置环境 1 Django 连接数据库(MySQL) DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME' ...

随机推荐

  1. hdu---------3189-------------------

    水体一个,但是这种做题的方法值得发扬光大............ Just Do It Time Limit: / MS (Java/Others) Memory Limit: / K (Java/O ...

  2. 理解C++中拷贝构造函数

    拷贝构造函数的功能是用一个已有的对象来初始化一个被创建的同样对象,是一种特殊的构造函数,具有一般构造函数的所有特性,当创建一个新对象的时候系统会自动调用它:其形参是本类对象的引用,它的特殊功能是将参数 ...

  3. ROS学习笔记十:URDF详解

    Unified Robot Description Format,简称为URDF(标准化机器人描述格式),是一种用于描述机器人及其部分结构.关节.自由度等的XML格式文件. 一.URDF语法规范 参见 ...

  4. [POI2008]激光发射器SZK

    Description 多边形相邻边垂直,边长为整数,边平行坐标轴.要在多边形的点上放一些激光发射器和接收器.满足下列要求: 1发射器和接收器不能放置在同一点: 2发射器发出激光可以沿壁反射,最终到达 ...

  5. 关于python深度学习网站

      大数据文摘作品,转载要求见文末 编译团队|姚佳灵 裴迅 简介 ▼ 深度学习,是人工智能领域的一个突出的话题,被众人关注已经有相当长的一段时间了.它备受关注是因为在计算机视觉(Computer Vi ...

  6. hdu 5036 Explosion bitset优化floyd

    http://acm.hdu.edu.cn/showproblem.php?pid=5036 题意就是给定一副有向图,现在需要走遍这n个顶点,一开始出发的顶点是这n个之中的随便一个. 如果走了1,那么 ...

  7. hdu3436Queue-jumpers(线段树)

    链接 这题最不好求的一部分是rank部分 因为top每次都是把一个数放在队头 不会穿插在数组里 也就是说后面没有top过的一部分数 依旧保持有序 这样可以分为两部分来处理 比如 1 2 3 4 5 6 ...

  8. jdk 1.8下 java ArrayList 添加元素解析

    转载请注明http://www.cnblogs.com/majianming/p/8006452.html 有人问我,java ArrayList底层是怎么实现的?我就回答数组,他再问我,那它是怎么实 ...

  9. WPF学习10:基于MVVM Light 制作图形编辑工具(1)

    图形编辑器的功能如下图所示: 除了MVVM Light 框架是一个新东西之外,本文所涉及内容之前的WPF学习0-9基本都有相关介绍. 本节中,将搭建编辑器的界面,搭建MVVM Light 框架的使用环 ...

  10. skeljs框架关键点使用

    global  全局 style.css    containers: 1400px;容器宽度 xlarge  超大屏(media: max-width:1680px) style-xlarge.cs ...