Django 数据库进阶操作
- 基本操作
- # 增
- #
- # models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs
- # obj = models.Tb1(c1='xx', c2='oo')
- # obj.save()
- # 查
- #
- # models.Tb1.objects.get(id=123) # 获取单条数据,不存在则报错(不建议)
- # models.Tb1.objects.all() # 获取全部
- # models.Tb1.objects.filter(name='seven') # 获取指定条件的数据
- # models.Tb1.objects.exclude(name='seven') # 获取指定条件的数据
- # 删
- #
- # models.Tb1.objects.filter(name='seven').delete() # 删除指定条件的数据
- # 改
- # models.Tb1.objects.filter(name='seven').update(gender='0') # 将指定条件的数据更新,均支持 **kwargs
- # obj = models.Tb1.objects.get(id=1)
- # obj.c1 = '111'
- # obj.save()
- 进阶操作
- # 获取个数
- #
- # models.Tb1.objects.filter(name='seven').count()
- # 大于,小于
- #
- # models.Tb1.objects.filter(id__gt=1) # 获取id大于1的值
- # models.Tb1.objects.filter(id__gte=1) # 获取id大于等于1的值
- # models.Tb1.objects.filter(id__lt=10) # 获取id小于10的值
- # models.Tb1.objects.filter(id__lte=10) # 获取id小于10的值
- # models.Tb1.objects.filter(id__lt=10, id__gt=1) # 获取id大于1 且 小于10的值
- # in
- #
- # models.Tb1.objects.filter(id__in=[11, 22, 33]) # 获取id等于11、22、33的数据
- # models.Tb1.objects.exclude(id__in=[11, 22, 33]) # not in
- # isnull
- # Entry.objects.filter(pub_date__isnull=True)
- # contains(类似于数据库中like的语法)
- #
- # models.Tb1.objects.filter(name__contains="ven")
- # models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感
- # models.Tb1.objects.exclude(name__icontains="ven")
- # range
- #
- # models.Tb1.objects.filter(id__range=[1, 2]) # 范围bettwen and
- # 其他类似
- # 以什么开始,以什么结束,和上面一样带i的是大小写不敏感
- # startswith,istartswith, endswith, iendswith,
- # order by
- # 排序
- # models.Tb1.objects.filter(name='seven').order_by('id') # asc
- # models.Tb1.objects.filter(name='seven').order_by('-id') # desc
- # group by
- #
- # from django.db.models import Count, Min, Max, Sum
- # models.Tb1.objects.filter(c1=1).values('id').annotate(c=Count('num'))
- # SELECT "app01_tb1"."id", COUNT("app01_tb1"."num") AS "c" FROM "app01_tb1" WHERE "app01_tb1"."c1" = 1 GROUP BY "app01_tb1"."id"
- # limit 、offset
- #
- # models.Tb1.objects.all()[10:20]
- # regex正则匹配,iregex 不区分大小写
- #
- # Entry.objects.get(title__regex=r'^(An?|The) +')
- # Entry.objects.get(title__iregex=r'^(an?|the) +')
- # date
- #
- # Entry.objects.filter(pub_date__date=datetime.date(2005, 1, 1))
- # Entry.objects.filter(pub_date__date__gt=datetime.date(2005, 1, 1))
- # year
- #
- # Entry.objects.filter(pub_date__year=2005)
- # Entry.objects.filter(pub_date__year__gte=2005)
- # month
- #
- # Entry.objects.filter(pub_date__month=12)
- # Entry.objects.filter(pub_date__month__gte=6)
- # day
- #
- # Entry.objects.filter(pub_date__day=3)
- # Entry.objects.filter(pub_date__day__gte=3)
- # week_day
- #
- # Entry.objects.filter(pub_date__week_day=2)
- # Entry.objects.filter(pub_date__week_day__gte=2)
- # hour
- #
- # Event.objects.filter(timestamp__hour=23)
- # Event.objects.filter(time__hour=5)
- # Event.objects.filter(timestamp__hour__gte=12)
- # minute
- #
- # Event.objects.filter(timestamp__minute=29)
- # Event.objects.filter(time__minute=46)
- # Event.objects.filter(timestamp__minute__gte=29)
- # second
- #
- # Event.objects.filter(timestamp__second=31)
- # Event.objects.filter(time__second=2)
- # Event.objects.filter(timestamp__second__gte=31)
- 高级操作
- # extra
- #
- # extra(self, select=None, where=None, params=None, tables=None, order_by=None, select_params=None)
- # Entry.objects.extra(select={'new_id': "select col from sometable where othercol > %s"}, select_params=(1,))
- # Entry.objects.extra(where=['headline=%s'], params=['Lennon'])
- # Entry.objects.extra(where=["foo='a' OR bar = 'a'", "baz = 'a'"])
- # Entry.objects.extra(select={'new_id': "select id from tb where id > %s"}, select_params=(1,), order_by=['-nid'])
- # F
- #
- # from django.db.models import F
- # models.Tb1.objects.update(num=F('num')+1)
- # Q
- #
- # 方式一:
- # Q(nid__gt=10)
- # Q(nid=8) | Q(nid__gt=10)
- # Q(Q(nid=8) | Q(nid__gt=10)) & Q(caption='root')
- # 方式二:
- # con = Q()
- # q1 = Q()
- # q1.connector = 'OR'
- # q1.children.append(('id', 1))
- # q1.children.append(('id', 10))
- # q1.children.append(('id', 9))
- # q2 = Q()
- # q2.connector = 'OR'
- # q2.children.append(('c1', 1))
- # q2.children.append(('c1', 10))
- # q2.children.append(('c1', 9))
- # con.add(q1, 'AND')
- # con.add(q2, 'AND')
- #
- # models.Tb1.objects.filter(con)
- # 执行原生SQL
- #
- # from django.db import connection, connections
- # cursor = connection.cursor() # cursor = connections['default'].cursor()
- # cursor.execute("""SELECT * from auth_user where id = %s""", [1])
- # row = cursor.fetchone()
1:__exact 精确等于 like 'aaa'
2:__iexact 精确等于 忽略大小写 ilike 'aaa'
3:__contains 包含 like '%aaa%'
4:__icontains 包含 忽略大小写 ilike '%aaa%',但是对于sqlite来说,contains的作用效果等同于icontains。
5:__gt 大于
6:__gte 大于等于
7:__lt 小于
8:__lte 小于等于
9:__in 存在于一个list范围内
10:__startswith 以...开头
11:__istartswith 以...开头 忽略大小写
12:__endswith 以...结尾
13:__iendswith 以...结尾,忽略大小写
14:__range 在...范围内
15:__year 日期字段的年份
16:__month 日期字段的月份
17:__day 日期字段的日
18:__isnull=True/False
模糊查询
第一种:
# query = models.Host.objects.filter(Q(name__contains=q) | Q(ip__contains=q))
第二种:
from django.db.models import Q
q = request.GET.get('q')
query_list = ['name', 'ip']
_q = Q()
_q.connector = 'OR'
for i in query_list:
_q.children.append(Q(('{}__contains'.format(i), q)))
query = models.Host.objects.filter(_q)
Django 数据库进阶操作的更多相关文章
- Django 数据库常见操作
首先要配置数据映射具体在这个连接里 https://www.cnblogs.com/Niuxingyu/p/10296143.html Django 建立数据库模型 #导包导入django数据库类 f ...
- Django数据库相关操作
首先,在settings.py中加入应用的名称,让数据库知道使用的是哪个应用,然后给那个应用创建表. 在settings.py中配置数据库相关参数,默认使用sqlite3不用配置 编辑models.p ...
- django数据库操作和中间件
数据库配置 django的数据库相关表配置在models.py文件中,数据库的连接相关信息配置在settings.py中 models.py相关相关参数配置 from django.db import ...
- Django中的ORM进阶操作
Django中的ORM进阶操作 Django中是通过ORM来操作数据库的,通过ORM可以很easy的实现与数据库的交互.但是仍然有几种操作是非常绕也特别容易混淆的.于是,针对这一块,来一个分类总结吧. ...
- Django之Models进阶操作(字段属性)
字段属性详细介绍 一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列, ...
- django 通过orm操作数据库
Django Model 每一个Django Model都继承自django.db.models.Model 在Model当中每一个属性attribute都代表一个database field 通过D ...
- Django 之models进阶操作
到目前为止,当我们的程序涉及到数据库相关操作时,我们一般都会这么搞: 创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 ...
- Django orm进阶查询(聚合、分组、F查询、Q查询)、常见字段、查询优化及事务操作
Django orm进阶查询(聚合.分组.F查询.Q查询).常见字段.查询优化及事务操作 聚合查询 记住用到关键字aggregate然后还有几个常用的聚合函数就好了 from django.db.mo ...
- web框架-(七)Django补充---models进阶操作及modelform操作
通过之前的课程我们可以对于Django的models进行简单的操作,今天了解下进阶操作和modelform: 1. Models进阶操作 1.1 字段操作 AutoField(Field) - int ...
随机推荐
- redis弱密码漏洞利用
背景: redis无认证,或者弱密码,可以成功连接到redis服务器 反弹shell拿到的权限取决于redis的启动账号 操作: 1. Centos7安装redis客户端 #yum install r ...
- eclipse中安装Activiti插件
由于公司网络问题,不能在线安装,下载到本地的插件,安装也是各种问题,后面终于找到能安装的插件包 1.下载eclipse activiti插件包 链接:https://pan.baidu.com/s/1 ...
- DEC-UPDATE
12/19-12/26 # -*- coding: utf-8 -*- import sys ans = [1,2,3,4,5,6] def operate(fun): a = ans[0] b = ...
- Tableau Sheet中的操作
如果想要给数据排名,例如给饼图中的数据排名 1 创建一个Rank 描述为INDEX()的测度 2.将RANK用Label形式显示并且编辑计算方法选择特定的属性. 属性本身也有可以快速计算的一些方式. ...
- 多线程-生产者消费者(synchronized同步)
正解博客:https://blog.csdn.net/u011863767/article/details/59731447 永远在循环(loop)里调用 wait 和 notify,不是在 If 语 ...
- jquery $(".classc",$(".classp"))的含义
jquery中有一种选择器的写法为:$(".classc",$(".classp")),注意,是$()中又嵌套了一个$(),这种写法的作用类似于$(" ...
- std::setw(size)与std::setfill(char)
头文件:#include <iostream>#include <iomanip>using namespace std; 功能: std::setw :需要填充多少个字符, ...
- centos 修改时区以及修正时间
1.查看系统当前的时区 [app@127-0-0-1 shine]$ timedatectl Local time: Wed 2019-10-23 17:56:17 CST Universal tim ...
- idea 导入(非maven)web项目并发布到tomcat服务器
IDEA 2017.1版本 web项目导入并发布到Tomcat服务器 1.点击编辑项目结构 2.点击project 将项目编译输出目录改成{项目目录}/OUT,并设置项目环境,编译版本 3.点击mod ...
- TTTTTTTTTTTTTTTTTTTTT POJ 3690 0与* 二维哈希 模板 +multiset
Constellations Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 5923 Accepted: 1164 De ...