1 create

def add_area(request):
area = Area.objects.create(name='commom',description='a commom area',manager='vicuic')
return HttpResponse('added successfully')
#具体的实现上,一般是web端使用post传递参数,然后再输入数据库,这里为了简便,所以直接设定值

  

2 select

什么是查询集?QuerySet

查询集,也称查询结果集、QuerySet,表示从数据库中获取的对象集合。

当调用如下过滤器方法时,Django会返回查询集(而不是简单的列表):

  • all():返回所有数据。
  • filter():返回满足条件的数据。
  • exclude():返回满足条件之外的数据。
  • order_by():对结果进行排序。

2.查询集特性:

一:惰性执行

创建all()等过滤方法时,数据库并不会进行实际查询
只有当真正使用时,如遍历的时候,才会真正去数据库进行查询
二:缓存

Django是动态网站,每次请求都会数据库中进行相应的操作。当访问量很大时,耗时就会增加。

缓存将某个views的返回值保存至内存或者memcache中,在设置的时间内,再有访问过来时,就不再执行view中的操作,而是直接从缓存中取值
缓存机制:每次有请求进来,先去看缓存是否有,有且未过期,直接拿值 
如果缓存没有或者已过期,就要走视图,走数据库

def list_area(request):
areas = Area.objects.all()
#返回带所有结果的查询集
blog_list = BlogPost.objects.all().order_by('-timestamp')
#返回所有结果的查询集,查询结果按照时间戳降序排列
#去掉-为升序
lines = models.UserInfo.objects.filter(username='jab',pwd='123123')
#返回filter过滤的查询集

  

ret = list(config.objects.filter(id=id).values('dir'))[0]
#objexts这个对象使用filter,返回查询集,然后values方法表示只要dir字段
#对查询集使用列表转换,然后取第一个数据

  

get()和filter()的区别:

get()返回的是一个models实例,如果没有get到则会抛出异常。

filter()返回的是查询集,相当于列表,如果没有fiter到,就返回{}。

如果只有一个匹配结果:

filter().fitst() = get()

filter()[0] = get()

values(*fields)

返回一个ValuesQuerySet —— QuerySet 的一个子类,迭代时返回字典而不是模型实例对象。

values() 接收可选的位置参数*fields,它指定SELECT 应该限制哪些字段。如果指定字段,每个字典将只包含指定的字段的键/值。如果没有指定字段,每个字典将包含数据库表中所有字段的键和值。

因为ManyToManyField 字段和反向关联可能有多个关联的行,包含它们可能导致结果集的倍数放大。如果你在values() 查询中包含多个这样的字段将更加明显,这种情况下将返回所有可能的组合。

user和roles是M2M, roles和perm也是M2M
这里就是查询一个user关联的所有roles,所关联的perm不是空的查询集。
为避免重复性,加入distinct() permission_menu_list = user.roles.filter(permissions__isnull=False).distinct().values(
'permissions__title',
'permissions__url',
'permissions__name',
'permissions__menu_id', # 菜单相关
'permissions__menu__title',
'permissions__menu__icon',
'permissions__parent_id', # 父权限相关
'permissions__parent__name'
)

  

参考:

https://www.cnblogs.com/rgxx/p/10382664.html

3 update

def update_area(request):
user = User.objects.get(username='vici')
Area.objects.filter(name='lovely').update(manager=user)
return HttpResponse('updated!')
#Area的manager字段为User的外键,先获取特定的User行赋值给user,然后在Area的行中做行更新。
#user是一个class,这里用get获取,才能将user作为外键赋值给manager
#如果用filter则返回一个查询集。无法赋值

  

4 delete

def delete_area(request):
# Area.objects.filter(name='lovely').delete()
User.objects.filter(username='vici').delete()
return HttpResponse('deleted!')
#由于Area的manager是User的外键,并且设置了级联删除,所以,当删除User中的一条数据,Area中引用这条数据的行都被删除了

django_view操作数据库的更多相关文章

  1. Java-jdbc操作数据库

    如果需要访问数据库,首先要加载数据库驱动,数据库驱动只需在第一次访问数据库时加载一次.然后在每次访问数据库时创建一个Connection实例,获取数据连接,这样就可以执行操作数据库的SQL语句.最后在 ...

  2. python高级之操作数据库

    python高级之操作数据库 本节内容 pymysql介绍及安装 使用pymysql执行sql 获取新建数据自增ID fetch数据类型设置 1.pymysql介绍及安装 在python2中连接数据库 ...

  3. greenDao:操作数据库的开源框架

    greenDAO: Android ORM for your SQLite database 1. greenDao库获取 英文标题借鉴的是greendrobot官网介绍greenDao时给出的Tit ...

  4. 总结一些关于操作数据库是sql语句还是存储过程问题

    总结一些关于操作数据库是sql语句还是存储过程问题 程序中,你跟数据的交互,需要向数据库拿数据.更改数据库的数据等,这些操作,本身不是程序完成的,而是程序发命令给数据库去做的,不管是通过sql语句方式 ...

  5. greendao操作数据库的使用方法

    第一步:把greendao-1.3.0-beta-1,greendao-generator-1.3.1两个jar包加载到工程的lib的文件夹中,一定要右键点击Add As Library后才能使用. ...

  6. pymysql 操作数据库

    一.简介 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同,但目前pymysql支持python3.x而后者不支持3.x版本 其执行语句与sql源码相似 二.使用 ...

  7. Asp.Net MVC 自定义的MVC框架(非EF操作数据库)

    一些废话:在北京辞职回家不知不觉中已经半年多了,这半年中有过很多的彷徨,困惑,还有些小小难受.半年时间算是我人生以来遇到过的最困苦的时候.理想的工作跟我擦肩而过,驾照也没有考过,年后这一改革...,毕 ...

  8. 一次莽撞的行为:在phpmyadmin中修改MySQL root密码后无法操作数据库

    一.手贱行为(✿◡‿◡) 在一次开发中通过xampp方式安装了PHP环境,需要操作数据库时通过phpmyadmin访问MySQL,在一次数据库操作时想起没有设置密码,于是直接在mysql数据库中的us ...

  9. python操作数据库

    一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...

随机推荐

  1. leetcode 747. Largest Number At Least Twice of Others

    In a given integer array nums, there is always exactly one largest element. Find whether the largest ...

  2. html5--4-4 audio元素/格式的转换

    html5--4-4 audio元素/格式的转换 学习要点 掌握audio元素的用法 视频/音频文件的格式转换 当前,audio 元素支持三种音频格式: Ogg 免费, 支持的浏览器:Firefox. ...

  3. hdu-5726 GCD(rmq)

    题目链接: GCD Time Limit: 10000/5000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Prob ...

  4. CISCO-端口安全

    1.MAC地址与端口绑定,当发现主机的MAC地址与交换机上指定的MAC地址不同时 ,交换机相应的端口将down掉.当给端口指定MAC地址时,端口模式必须为access或者Trunk状况. 3550-1 ...

  5. java实现EXCEL数据导入到数据库中的格式问题的解决

    之前作为项目甲方,加之java接触不多,在java web开发方面都是打下手的份. 对于EXCEL数据导入到数据库这个问题一直老是出现格式原因而导入失败也是未免惆怅,开发团队也是只说回去检查一下格式. ...

  6. 51nod最长递增路径:(还不错的图)

    一个无向图,可能有自环,有重边,每条边有一个边权.你可以从任何点出发,任何点结束,可以经过同一个点任意次.但是不能经过同一条边2次,并且你走过的路必须满足所有边的权值严格单调递增,求最长能经过多少条边 ...

  7. bzoj3168

    二分图+矩阵求逆 既然我们考虑b能替换哪些a,那么我们自然要得出b被哪些a表示,这里我们设一个矩阵C,那么C*A = B 为什么呢?直接A*C = B是不可行的,因为都是行向量,不能直接乘,那么我们转 ...

  8. Java--23种设计模式之decorator模式

    装饰模式:装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案,提供比继承更多的灵活性.动态给一个对象增加功能,这些功能可以再动态的撤消.增加由一些基本功能的排列组合而产生的非常大量的 ...

  9. vector中resize()和reserve()区别

    先看看<C++ Primer>中对resize()函数两种用法的介绍: 1.resize(n) 调整容器的长度大小,使其能容纳n个元素. 如果n小于容器的当前的size,则删除多出来的元素 ...

  10. 3.2-3.3 Hive中常见的数据压缩

    一.数据压缩 1. 数据压缩 数据量小 *本地磁盘,IO *减少网络IO Hadoop作业通常是IO绑定的; 压缩减少了跨网络传输的数据的大小; 通过简单地启用压缩,可以提高总体作业性能; 要压缩的数 ...