django的数据库操作
ORM是通过使用描述对象和数据库之间映射的元数据,将程序中的对象自动持久化到关系数据库中,ORM在业务逻辑层和数据库层之间充当了桥梁的作用。
django的交互式shell
python manage.py shell 进入shell后引入相应的models
from plugin_security.models import Rule
增
返回被创建的对象
Rule.objects.create(plugin_name='ew2o2',plugin_relation='=')
Rule.objects.create(plugin_name='ew2o')
或
obj = models.UserInfo(user=’yangmv’,pwd=’′)
obj.age=
obj.save()
或者
dic = {‘user’:’yangmv’,’pwd’:’′}
models.UserInfo.objects.create(**dic) Person.objects.get_or_create(name="WZT", age=) 这种方法是防止重复很好的方法,但是速度要相对慢些,返回一个元组,第一个为Person对象,第二个为True或False, 新建时返回的是True, 已经存在时返回False.
删
Rule.objects.filter(plugin_name__contains='test').delete() 返回被删除的总行数
或者
rule=Rule.objects.filter(plugin_name__contains='test')
rule.delete()
改
批量更新,适用于 .all() .filter() .exclude() 等后面 (危险操作,正式场合操作务必谨慎)
修改查到的所有行,返回受影响的行数
Rule.objects.all().update(plugin_relation='>')
Rule.objects.filter(id=).update(plugin_relation='>')
Rule.objects.all().update(plugin_relation='>',plugin_version='2.2.3')
Person.objects.filter(name__contains="abc").update(name='xxx') # 名称中包含 "abc"的人 都改成 xxx
Person.objects.all().delete() # 删除所有 Person 记录 单个 object 更新,适合于 .get(), get_or_create(), update_or_create() 等得到的 obj,和新建很类似。 twz = Author.objects.get(name="WeizhongTu")
twz.name="WeizhongTu"
twz.email="tuweizhong@163.com"
twz.save() # 最后不要忘了保存!!!
Job.objects.update_or_create(defaults={'app_name': app_name,'job_name': job_name,'job_git': job_git,'git_branch': git_branch,'build_number': build_number},**{'job_name': job_name})
使用kwargs查找,找到,就更新,否则创建,更新或者创建的内容是:defaults的内容
def update_or_create(self, defaults=None, **kwargs):
"""
Look up an object with the given kwargs, updating one with defaults
if it exists, otherwise create a new one.
Return a tuple (object, created), where created is a boolean
specifying whether an object was created.
"""
查
filter总是返回一个对象集合,即使只有一个对象,get总是返回一个确定的对象,因此get是用来获取一个对象的
查询所有:
Rule.objects.all()
过滤查询:get方法,使用相对简单,用法单一
Rule.objects.get(id=),对象不存在报错,对象多余一个也会报错
Rule.objects.get(pk=),对象不存在报错,pk=primary key主键
filter方法
Rule.objects.filter(id=),对象不存在返回空的QuerySet:<QuerySet []>,等同于Rule.objects.filter(id__exact=)
Rule.objects.filter(plugin_name__iexact='Test')不区分大小写
Rule.objects.filter(id=).first() 返回单个对象,为空时返回None
Rule.objects.filter(id=).all() 返回所有对象,为空时返回<QuerySet []>
级联查询:
Rule.objects.all().filter(id=)
Rule.objects.all().filter(id=).first()
Rule.objects.all().filter(id=).all()
Rule.objects.all().filter(id=).all().filter(id=).get(id=)
模糊查询:格式,两个下划线字符后面跟的是筛选符号
Rule.objects.filter(plugin_name__contains='test')
Rule.objects.filter(plugin_name__contains='test').all()
通过切片限制获取到的查询结果,切片可以节约内存,不支持负索引:
Rule.objects.all()[:]
只获取某些列:
Rule.objects.all().values('plugin_name','plugin_version')
<QuerySet [{'plugin_name': 'ewo', 'plugin_version': ''}, {'plugin_name': 'ew2o', 'plugin_version': ''}, {'plugin_name': 'ew2o2', 'plugin_version': ''}]> Rule.objects.all().values_list('plugin_name','plugin_version')
<QuerySet [('ewo', ''), ('ew2o', ''), ('ew2o2', '')]> 排序查询:
Rule.objects.order_by('plugin_name')
取反:
Rule.objects.order_by('-plugin_name')
进一步过滤:
Rule.objects.order_by('-plugin_name').filter(id=) 正则表达式:
Person.objects.filter(name__regex="^abc") # 正则表达式查询
Person.objects.filter(name__iregex="^abc") # 正则表达式不区分大小写 Person.objects.exclude(name__contains="WZ") # 排除包含 WZ 的Person对象
Person.objects.filter(name__contains="abc").exclude(age=) # 找出名称含有abc, 但是排除年龄是23岁的 去重:
Rule.objects.filter(plugin_name__iexact='TesT').distinct()
数量:
Entry.objects.count()
判断是否存在
Entry.objects.all().exists() # 1. 使用 reverse() 解决
Person.objects.all().reverse()[:2] # 最后两条
Person.objects.all().reverse()[0] # 最后一条
# 2. 使用 order_by,在栏目名(column name)前加一个负号
Author.objects.order_by('-id')[:20] # id最大的20条
QuerySet 是什么呢?
从本质上说,QuerySet 是给定模型的对象列表(list)。QuerySet 允许您从数据库中读取数据,对其进行筛选以及排序。
参考:
https://code.ziqiangxuetang.com/django/django-queryset-api.html
https://docs.djangoproject.com/en/2.1/topics/db/
https://docs.djangoproject.com/zh-hans/2.1/topics/db/queries/#creating-objects
django的数据库操作的更多相关文章
- Django 2.0 学习(16):Django ORM 数据库操作(下)
Django ORM数据库操作(下) 一.增加表记录 对于表单有两种方式: # 方式一:实例化对象就是一条表记录france_obj = models.Student(name="海地&qu ...
- Django 2.0 学习(14):Django ORM 数据库操作(上)
Django ORM 数据库操作(上) ORM介绍 映射关系: 数据库表名 ---------->类名:数据库字段 ---------->类属性:数据库表一行数据 ----------&g ...
- Django与数据库操作
Django与数据库操作 数据库连接的方法 web 框架 django --- 自己内部实现 (ORM) + pymysql(连接) Flask,tornado --- pymysql SQLArch ...
- django models 数据库操作
django models 数据库操作 创建模型 实例代码如下 from django.db import models class School(models.Model): pass class ...
- Django模型-数据库操作
前言 前边记录的URLconf和Django模板全都是介绍页面展示的东西,也就是表现层的内容.由于Python先天具备简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站. 这篇开 ...
- django中数据库操作——in操作符
django一对多关系中,为了实现按照一端查询多端,之前都是用extra操作符,经过查看官方文档还有in这个操作符,用这个实现更简单.直接上代码: 根据查询条件模糊查询所有符合条件的机架列表,然后根据 ...
- django models数据库操作
一.数据库操作 1.创建model表 基本结构 1 2 3 4 5 6 from django.db import models class userinfo(models.M ...
- 03: Django Model数据库操作
目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...
- django 快速数据库操作,不用SQL语句
配置models文件 # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import mod ...
- django学习-数据库操作接口API--(CRUD)
初试API(数据库操作接口CRUD) 现在我们进入交互式python命令行,尝试一下django为你创建的各种API,通过以下命令打开python命令行: py -3 manage.py shell进 ...
随机推荐
- [C] 错误笔记:函数调用——值传递
前提: 写一个函数,功能为在堆内开辟一块空间,并将首地址以函数参数的形式返回主调函数 错误demo void test(char *a) { ] = "hello"; printf ...
- Ⅳ.Catalan数
Catalan数首先是由Euler在精确计算对凸n边形的不同的对角三角形剖分的个数问题时得到的,它经常出现在组合计数问题中. 问题的提出:在一个凸n边形中,通过不相交于n边形内部的对角线,把n ...
- mysql 日期 字符串 时间戳转换
#时间转字符串 select date_format(now(), '%Y-%m-%d'); -02-27 #时间转时间戳 select unix_timestamp(now()); #字符串转时间 ...
- CentOS 7下KVM支持虚拟化/嵌套虚拟化配置
开启虚拟化: cat << EOF > /etc/modprobe.d/kvm-nested.conf options kvm-intel nested=1 options kvm- ...
- 一个.net程序客户端更新方案
客户端程序一个很大的不便的地方就是程序集更新,本文这里简单的介绍一种通用的客户端更新方案.这个方案依赖程序集的动态加载,具体方案如下: 将程序集存储在一个文件数据库中,客户端所有程序集直接从文件数据库 ...
- HDU 4738 Caocao's Bridges (2013杭州网络赛1001题,连通图,求桥)
Caocao's Bridges Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) ...
- gitblit.cmd运行自动关闭
前几天运行gitblit.cmd一直正常,今天运行gitblit.cmd,几秒钟后命令行窗口就自动关闭了,导致无法启动gitblit服务器,查看日志如下: 刚开始以为是防火墙问题,在防火墙中添加了程序 ...
- 【Go命令教程】9. go list
go list 命令的作用是列出指定的 代码包 的信息.与其他命令相同,我们需要以 代码包导入路径 的方式给定代码包.被给定的代码包可以有多个.这些代码包对应的目录中必须直接保存有 Go 语言源码文件 ...
- cocos2d-x学习资源汇总
http://blog.csdn.net/akof1314 http://blog.csdn.net/bill_man/ http://blog.csdn.net/fylz1125/ MoonWa ...
- ProFTPd Local pr_ctrls_connect Vulnerability - ftpdctl 漏洞及攻击代码分析
攻击代码网址:http://www.exploit-db.com/exploits/394/ 1.执行环境: 1.ProFTPD 1.3.0/1.3.0a 2.编译ProFTPD时.--enable- ...