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进 ...
随机推荐
- 【LeetCode】142. Linked List Cycle II
Difficulty:medium More:[目录]LeetCode Java实现 Description Given a linked list, return the node where t ...
- 使用<c:set>标签配置项目路径
写在前面的话: 在java项目中,路径的配置是一项最基础也是最必不可少的工作,最初我们配置路径是根据<%=request.getContextPath()%>这个java代码块进行配置的, ...
- 既使用maven编译,又使用lib下的Jar包
<build> <finalName>xxx</finalName> <plugins> <plugin> <groupId>o ...
- java微信公众号JSAPI支付以及所遇到的坑
上周做了个支付宝微信扫码支付,今天总结一下.微信相比支付宝要麻烦许多 由于涉及到代理商,没办法,让我写个详细的申请流程,懵逼啊. 笔记地址 http://note.youdao.com/notesha ...
- Gift动图分解小工具
gif 动图分解小工具 Overview 因为自己有时候需要将一些gif图片分解,但是没有在网上找到合适的工具,所有就自己写了一个,在这里与大家分享,其实实现很简单,是通过C#实现的.文章下方有下载链 ...
- Tecnomatix Process Designer & Process Simulate用法
1. 删除项目 在AdminConsole->Project Action中,点击Delete project即可.
- 面向对象设计原则 接口分离原则(Interface Segregation Principle)
接口隔离原则 使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口. 从接口隔离原则的定义可以看出,他似乎跟SRP有许多相似之处. 是的其实ISP和SRP都是强调职责的单一性 ...
- Codeforces.314E.Sereja and Squares(DP)
题目链接 http://www.cnblogs.com/TheRoadToTheGold/p/8443668.html \(Description\) 给你一个擦去了部分左括号和全部右括号的括号序列, ...
- qunar-dns
去哪儿QInfra大会 IT大咖说 - 大咖干货,不再错过 http://www.itdks.com/eventlist/detail/1313
- ftp通用类2
using System; using System.Net; using System.IO; using System.Text; using System.Net.Sockets; /// &l ...