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的数据库操作的更多相关文章

  1. Django 2.0 学习(16):Django ORM 数据库操作(下)

    Django ORM数据库操作(下) 一.增加表记录 对于表单有两种方式: # 方式一:实例化对象就是一条表记录france_obj = models.Student(name="海地&qu ...

  2. Django 2.0 学习(14):Django ORM 数据库操作(上)

    Django ORM 数据库操作(上) ORM介绍 映射关系: 数据库表名 ---------->类名:数据库字段 ---------->类属性:数据库表一行数据 ----------&g ...

  3. Django与数据库操作

    Django与数据库操作 数据库连接的方法 web 框架 django --- 自己内部实现 (ORM) + pymysql(连接) Flask,tornado --- pymysql SQLArch ...

  4. django models 数据库操作

    django models 数据库操作 创建模型 实例代码如下 from django.db import models class School(models.Model): pass class ...

  5. Django模型-数据库操作

    前言 前边记录的URLconf和Django模板全都是介绍页面展示的东西,也就是表现层的内容.由于Python先天具备简单而强大的数据库查询执行方法,Django 非常适合开发数据库驱动网站. 这篇开 ...

  6. django中数据库操作——in操作符

    django一对多关系中,为了实现按照一端查询多端,之前都是用extra操作符,经过查看官方文档还有in这个操作符,用这个实现更简单.直接上代码: 根据查询条件模糊查询所有符合条件的机架列表,然后根据 ...

  7. django models数据库操作

    一.数据库操作 1.创建model表         基本结构 1 2 3 4 5 6 from django.db import models     class userinfo(models.M ...

  8. 03: Django Model数据库操作

    目录:Django其他篇 01:Django基础篇 02:Django进阶篇 03:Django数据库操作--->Model 04: Form 验证用户数据 & 生成html 05:Mo ...

  9. django 快速数据库操作,不用SQL语句

    配置models文件 # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import mod ...

  10. django学习-数据库操作接口API--(CRUD)

    初试API(数据库操作接口CRUD) 现在我们进入交互式python命令行,尝试一下django为你创建的各种API,通过以下命令打开python命令行: py -3 manage.py shell进 ...

随机推荐

  1. Java基础常见英语词汇(共70个)

    ——————————ASP.Net+Android+IOS开发..Net培训.期待与您交流!—————————— Java英文单词 OO: object—oriented ,面向对象 OOP:obje ...

  2. flume修改配置文件

    flume修改配置文件后,flume进程会自动将配置文件更新至服务中,同时会初始化日志,重新对于metrics进行记录的. 所以拿api做监控的同学要注意这点啦

  3. CI框架与Thinkphp框架的一些区别

    初学CI框架遇到的一些问题,与Thinkphp框架对比的不同之处. system             是框架核心 application        是项目目录 index.php        ...

  4. js 把数组对象按照某个属性进行排序

    var arr=[{a:1},{a:3},{a:2}]; function objSort(prop){ return function (obj1, obj2) { var val1 = obj1[ ...

  5. Linux学习路线+资源

    Linux学习路线,个人收集分享 学习路线图 资源链接(蓝色下划线字体对应相应资源链接) Linux 基础 Linux 基础 Linux安装专题教程 Linux中文环境 Linux—从菜鸟到高手 鸟哥 ...

  6. http://blog.mn886.net/jqGrid/

    http://blog.mn886.net/jqGrid/  中文版 http://www.trirand.com/blog/jqgrid/jqgrid.html  英文版

  7. HDU.5730.Shell Necklace(分治FFT)

    题目链接 \(Description\) 有\(n\)个长度分别为\(1,2,\ldots,n\)的珠子串,每个有\(a_i\)种,每种个数不限.求有多少种方法组成长度为\(n\)的串.答案对\(31 ...

  8. MyBatis3与Spring3无缝集成-从iBatis平滑过渡

    从2010开始接触iBatis到现在,一直到现在把iBatis作为数据访问层ORM.为了演示一个Web应用,今天又搭了个SpringMVC应用,由于应用比较简单,Spring版本直接用最新版本3.2. ...

  9. Codeforces Round #394 (Div. 2) B. Dasha and friends 暴力

    B. Dasha and friends 题目连接: http://codeforces.com/contest/761/problem/B Description Running with barr ...

  10. Codeforces Round #292 (Div. 1)A. Drazil and Factorial 构造

    A. Drazil and Factorial 题目连接: http://codeforces.com/contest/516/problem/A Description Drazil is play ...