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进 ...
随机推荐
- Java基础常见英语词汇(共70个)
——————————ASP.Net+Android+IOS开发..Net培训.期待与您交流!—————————— Java英文单词 OO: object—oriented ,面向对象 OOP:obje ...
- flume修改配置文件
flume修改配置文件后,flume进程会自动将配置文件更新至服务中,同时会初始化日志,重新对于metrics进行记录的. 所以拿api做监控的同学要注意这点啦
- CI框架与Thinkphp框架的一些区别
初学CI框架遇到的一些问题,与Thinkphp框架对比的不同之处. system 是框架核心 application 是项目目录 index.php ...
- js 把数组对象按照某个属性进行排序
var arr=[{a:1},{a:3},{a:2}]; function objSort(prop){ return function (obj1, obj2) { var val1 = obj1[ ...
- Linux学习路线+资源
Linux学习路线,个人收集分享 学习路线图 资源链接(蓝色下划线字体对应相应资源链接) Linux 基础 Linux 基础 Linux安装专题教程 Linux中文环境 Linux—从菜鸟到高手 鸟哥 ...
- http://blog.mn886.net/jqGrid/
http://blog.mn886.net/jqGrid/ 中文版 http://www.trirand.com/blog/jqgrid/jqgrid.html 英文版
- HDU.5730.Shell Necklace(分治FFT)
题目链接 \(Description\) 有\(n\)个长度分别为\(1,2,\ldots,n\)的珠子串,每个有\(a_i\)种,每种个数不限.求有多少种方法组成长度为\(n\)的串.答案对\(31 ...
- MyBatis3与Spring3无缝集成-从iBatis平滑过渡
从2010开始接触iBatis到现在,一直到现在把iBatis作为数据访问层ORM.为了演示一个Web应用,今天又搭了个SpringMVC应用,由于应用比较简单,Spring版本直接用最新版本3.2. ...
- Codeforces Round #394 (Div. 2) B. Dasha and friends 暴力
B. Dasha and friends 题目连接: http://codeforces.com/contest/761/problem/B Description Running with barr ...
- Codeforces Round #292 (Div. 1)A. Drazil and Factorial 构造
A. Drazil and Factorial 题目连接: http://codeforces.com/contest/516/problem/A Description Drazil is play ...