django_view操作数据库
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操作数据库的更多相关文章
- Java-jdbc操作数据库
如果需要访问数据库,首先要加载数据库驱动,数据库驱动只需在第一次访问数据库时加载一次.然后在每次访问数据库时创建一个Connection实例,获取数据连接,这样就可以执行操作数据库的SQL语句.最后在 ...
- python高级之操作数据库
python高级之操作数据库 本节内容 pymysql介绍及安装 使用pymysql执行sql 获取新建数据自增ID fetch数据类型设置 1.pymysql介绍及安装 在python2中连接数据库 ...
- greenDao:操作数据库的开源框架
greenDAO: Android ORM for your SQLite database 1. greenDao库获取 英文标题借鉴的是greendrobot官网介绍greenDao时给出的Tit ...
- 总结一些关于操作数据库是sql语句还是存储过程问题
总结一些关于操作数据库是sql语句还是存储过程问题 程序中,你跟数据的交互,需要向数据库拿数据.更改数据库的数据等,这些操作,本身不是程序完成的,而是程序发命令给数据库去做的,不管是通过sql语句方式 ...
- greendao操作数据库的使用方法
第一步:把greendao-1.3.0-beta-1,greendao-generator-1.3.1两个jar包加载到工程的lib的文件夹中,一定要右键点击Add As Library后才能使用. ...
- pymysql 操作数据库
一.简介 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同,但目前pymysql支持python3.x而后者不支持3.x版本 其执行语句与sql源码相似 二.使用 ...
- Asp.Net MVC 自定义的MVC框架(非EF操作数据库)
一些废话:在北京辞职回家不知不觉中已经半年多了,这半年中有过很多的彷徨,困惑,还有些小小难受.半年时间算是我人生以来遇到过的最困苦的时候.理想的工作跟我擦肩而过,驾照也没有考过,年后这一改革...,毕 ...
- 一次莽撞的行为:在phpmyadmin中修改MySQL root密码后无法操作数据库
一.手贱行为(✿◡‿◡) 在一次开发中通过xampp方式安装了PHP环境,需要操作数据库时通过phpmyadmin访问MySQL,在一次数据库操作时想起没有设置密码,于是直接在mysql数据库中的us ...
- python操作数据库
一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...
随机推荐
- Algorithm: Euclid's algorithm of finding GCD
寻找最大公约数方法 代码如下: int gcd (int a, int b) { return b ? gcd (b, a % b) : a; } 应用:求最小公倍数 代码如下: int lcm (i ...
- HDU5950 Recursive sequence —— 矩阵快速幂
题目链接:https://vjudge.net/problem/HDU-5950 Recursive sequence Time Limit: 2000/1000 MS (Java/Others) ...
- codeforces 463B Caisa and Pylons 解题报告
题目链接:http://codeforces.com/problemset/problem/463/B 题目意思:Caisa 站在 0 pylon 并且只有 0 energy,他需要依次跳过1 pyl ...
- tflearn 中文汉字识别,训练后模型存为pb给TensorFlow使用——模型层次太深,或者太复杂训练时候都不会收敛
tflearn 中文汉字识别,训练后模型存为pb给TensorFlow使用. 数据目录在data,data下放了汉字识别图片: data$ ls0 1 10 11 12 13 14 15 ...
- Android Developers - Training
Recently I've been contemplating to create a new App with the true "Android Design",new An ...
- vim的tab缩进及用空格设置
编辑~/.vimrc文件,分别设置用空格而不是用tab,一个tab多少个空格,自动缩进多少宽度,显示行号. set expandtabset tabstop=4 set shiftwidth=4 se ...
- Java并发之synchronized
Java多线程同步关键词是常用的多线程同步手段.它可以修饰静态类方法,实例方法,或代码块.修饰static静态方法时是对整个类加锁. 一.实现原理 在JVM中对象内存分三块区域,对象头.实例数据.对齐 ...
- 选择合适的innodb_log_file_size
如果对 Innodb 数据表有大量的写入操作,那么选择合适的 innodb_log_file_size 值对提升MySQL性能很重要.然而设置太大了,就会增加恢复的时间,因此在MySQL崩溃或者突然断 ...
- Docker运行MongoDB及Redis及ssh端口映射远程连接
Docker运行MongoDB及Redis及ssh端口映射远程连接 本节内容简介 在本实验里我们将通过完成 MongoDB 和 Redis 两个容器来学习Dockerfile及Docker的运行机制. ...
- CS231n 2016 通关 第五章 Training NN Part1
在上一次总结中,总结了NN的基本结构. 接下来的几次课,对一些具体细节进行讲解. 比如激活函数.参数初始化.参数更新等等. ====================================== ...