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. thunderbird 登录网易邮箱

    登录密码不是自己的密码,而是在网易邮箱中设置的客户端授权ma,自己先进入邮箱进行设置即可

  2. Stamps ans Envelope Sive UVA - 242

    ( ||{集合x}表示x中元素1||x中元素2||...||x的最后一个元素||(a,b)表示a||b) ans[i][j][k]表示考虑前i种邮票时取j个邮票能否得到面值kans[i][j][k]= ...

  3. Android推送服务(1)几种实现方式

    1.几种常见的解决方案实现原理 1)轮询(Pull)方式:应用程序应当阶段性的与服务器进行连接并查询是否有新的消息到达,你必须自己实现与服务器之间的通信,例如消息排队等.而且你还要考虑轮询的频率,如果 ...

  4. sdut1642Simple Arithmetics(模拟)

    链接 发个长长的模拟 这题要注意的地方挺多 -的个数 以及对齐的情况 全都注意好了 大数的加减乘就可以了 #include <iostream> #include<cstdio> ...

  5. Spring数据访问2 - 通过JDBC访问数据库

    因为原生的jdbc操作太复杂,几乎都是建立连接.关闭连接和处理例外等模板式的代码,Spring对此进行了抽象——使用模板来消除样板式代码 ,JdbcTemplate承担了简化数据库访问这块的任务. 利 ...

  6. eclipse debug java 源码

    当我们需要研究java SE的时候,debug 源码是个不错的选择,可以帮助我们清楚了解java 封装jar包的具体实现. 因为oracle 提供的源码jar包为了节省空间,所以没有将调试信息一起打包 ...

  7. 搜索可用docker镜像

    简介:这一步的目标是学会使用docker search命令来检索可用镜像. 搜索可用的docker镜像 目标: 提示: 正确的命令: 搜索可用的docker镜像 使用docker最简单的方式莫过于从现 ...

  8. iOS----创建静态库

    静态库 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.根据源代码的公开情况,库可以分为2种类型 开源库 公开源代码,能看到具体实现 比如SDWebImage.AFNetworkin ...

  9. java io性能分析

    摘要: 本文大多技术围绕调整磁盘文件 I/O,但是有些内容也同样适合网络 I/O 和窗口输出. 第一部分技术讨论底层的I/O问题,然后讨论诸如压缩,格式化和串行化等高级I/O问题.然而这个讨论没有包含 ...

  10. 为什么jfinal的控制器不用单例模式

    先假controller定采用单例模式,通常两种设计方式来存放 HttpServletRequest.HttpServletResponse 等对象,一是利用一个类似于 ActionContext 的 ...