django(6)model表语句操作、Form操作、序列化操作
1.model建表操作之创建索引、元数据
# 单表操作,创建表 class User(models.Model): name = models.CharField(max_length=32) email = models.CharField(max_length=32) class Meta: # 数据库中生成的表名称 默认是 app名称 + 下划线 + 类名 db_table = "tb1" #自定义生成的表名,这里不叫“app01_user”,而是叫“tb1” index_together = [ #创建联合索引,即通过这俩字段联合查找 ("name", 'email'), ] unique_together = (("name", "email"),)# 创建联合唯一索引
2.model语句:
- 查找日期为空的所有条数models.Entry.objects.filter(pub_date__isnull=True)
获取id等于11、22、33的数据models.Tb1.objects.filter(id__in=[11, 22, 33])
获取id不等于11、22、33的数据models.Tb1.objects.exclude(id__in=[11, 22, 33])
- 获取name字段中包含‘ven’的所有数据models.Tb1.objects.filter(name__contains="ven")(区分大小写)
- 获取name字段中包含‘ven’的所有数据models.Tb1.objects.filter(name__icontains="ven")(不区分大小写,有的数据库不好使)
获取name字段中不包含‘ven’的所有数据models.Tb1.objects.exclude(name__icontains="ven")
- 查询id在1-3范围内的所有数据models.Tb1.objects.filter(id__range=[1, 3])
- 查询某字段以什么开始或结束的所有数据models.Tb1.objects.filter(startswith=‘ven’) 还有(istartswith, endswith, iendswith,)
- 升序排序models.Tb1.objects.filter(name='seven').order_by('id')
- 降序排序models.Tb1.objects.filter(name='seven').order_by('-id')
- values
al = models.Article.objects.filter(article_type_id=).values('id','title','content').first()#只获取符合条件的第一条,而且是字典形式 values.first获取的结果是: {, 'title': '你好', 'content': '我是对对对'} alls = models.Article.objects.filter(article_type_id=).values('id','title','content')#获取全部数据,而且是QuerySet 形式 values获取的结果是: <QuerySet [{, , 'title': '他好', 'content': '我是急急急'}]> 通过for循环取出所有数据: {, 'title': '你好', 'content': '我是对对对'} {, 'title': '他好', 'content': '我是急急急'}
- 正则匹配
# 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))查询pub_date的日期为2005.1.1的所有数据,注意双下划綫 # Entry.objects.filter(pub_date__date__gt=datetime.date(2005, 1, 1))查询pub_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)
- 分组查询
# from django.db.models import Count, Min, Max, Sum # models.Tb1.objects.filter(c1=1).values('name').annotate(c=Count('num'))查询字段c1=1的所有数据并根据字段name进行分组,
并计算出每组有多少数据,sum是求出一个和
14.倒叙显示models.UserInfo.objects.all().order_by('-nid').reverse() 必须order_by与reverse联用才有效
15.仅取某几个字段的值
def only(self, *fields): models.UserInfo.objects.only('username','id') 或 models.UserInfo.objects.filter(...).only('username','id')
16.不取某几个字段的值
def defer(self, *fields): models.UserInfo.objects.defer('username','id') 或 models.UserInfo.objects.filter(...).defer('username','id')
17.跨表查询提高查询效率,只去有相应外键字段的关联表中取数据select_related
users=models.User.objects.all().select_related('外键字段1',‘外键字段2’)
for row in users:
print(row.外键字段1.name,row.外键字段2.name)
还有一种方法prefetch_related,先将所有查询到的数据放到内存中,等用到某个数据时在去内存里查
users = models.User.objects.filter(id__gt=30).prefetch_related('ut','tu')
# select * from users where id > 30
# 获取上一步骤中所有的ut_id=[1,2]
# select * from user_type where id in [1,2]
for row in users:
print(row.user,row.pwd,row.ut_id)
print(row.ut.name)
18.根据年、年月、年月日进行查询 models.DatePlus.objects.dates('字段名','day或yesr或month','DESC或ASC')
19.指定时区并精确到秒进行查询models.DDD.objects.datetimes('字段名','hour',tzinfo=pytz.timezone('Asia/Shanghai'))
‘hour’这里还可以是:"year", "month", "day", "hour", "minute", "second"
这里必须先安装导入pytz.timezone才可以
"""
pip3 install pytz import pytz pytz.all_timezones pytz.timezone(‘Asia/Shanghai’) """
20.写原生sql语句:models.DDD.objects.raw(‘原生sql语句’)
更多models操作,详见http://www.cnblogs.com/wupeiqi/articles/6216618.html
二、专门为ajax操作做的数据序列化操作(json)
第一种: from django.core import serializers v = models.tb.objects.all() data = serializers.serialize("json", v) 第二种: import json from datetime import date from datetime import datetime class JsonCustomEncoder(json.JSONEncoder): (如果有事件类型的数据,必须写一个专门处理时间的类) def default(self, field): if isinstance(field, datetime): return field.strftime('%Y-%m-%d %H:%M:%S') elif isinstance(field, date): return field.strftime('%Y-%m-%d') else: return json.JSONEncoder.default(self, field) v = models.tb.objects.values('id','name','ctime') v = list(v) v = json.dumps(v,cls=JsonCustomEncoder)
django(6)model表语句操作、Form操作、序列化操作的更多相关文章
- Django之model补充:一对多、跨表操作
表结构概述 model.py : class Something(models.Model): name = models.CharField(max_length=32) class UserTyp ...
- Django(八)下:Model操作和Form操作、序列化操作
二.Form操作 一般会创建forms.py文件,单独存放form模块. Form 专门做数据验证,而且非常强大.有以下两个插件: fields :验证(肯定会用的) widgets:生成HTML(有 ...
- Django之Model操作
Django之Model操作 本节内容 字段 字段参数 元信息 多表关系及参数 ORM操作 1. 字段 字段列表 AutoField(Field) - int自增列,必须填入参数 primary_ke ...
- Python之路【第二十二篇】:Django之Model操作
Django之Model操作 一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bi ...
- python第一百一十一天 --Django 6 model 的相关操作
创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db ...
- Django使用普通表单、Form、以及modelForm操作数据库方式总结
Django使用普通表单.Form.以及modelForm操作数据库主要应用于增删该查的情景下,流程通用如下,只是实现方式不一样: 进入填写表单页面: 在表单页面填写信息,并提交: 表单数据验证 验证 ...
- day23 Model 操作,Form 验证以及序列化操作
Model 操作 1创建数据库表 定制表名: 普通索引: 创建两个普通索引,这样就会生成两个索引文件 联合索引: 为了只生成一个索引文件,才 ...
- Django之Model相关操作
一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列,必须填入参数 pr ...
- django之model,crm操作
一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列,必须填入参数 pr ...
随机推荐
- 「HEOI2016/TJOI2016」序列
题目链接 戳这 Solution 首先考虑最暴力的dp 我们设: \(f[i]\)表示选择\(i\)以后所能形成的满足条件的子序列的最大值 \(minx[i]\)表示\(i\)能转换为的最小值 \(m ...
- 个人JS体系整理(三)
一. 严格模式 JavaScript 严格模式(strict mode)即在严格的条件下运行.首先声明,严格模式是ES5中提出来的,准确来说就是一句指令Use strict,它的目的是指定代码在严格条 ...
- 单机,伪分布式,完全分布式-----搭建Hadoop大数据平台
Hadoop大数据——随着计算机技术的发展,互联网的普及,信息的积累已经到了一个非常庞大的地步,信息的增长也在不断的加快.信息更是爆炸性增长,收集,检索,统计这些信息越发困难,必须使用新的技术来解决这 ...
- 抓包(Charles工具入门)
一.charles工具简单使用 1.录制操作 录制请求.清空录制请求: 两种展示请求的视图方式: 2.录制请求的简单分析 (1)请求的总览页面Overview:可查看请求路径.请求方式.请求时间等有关 ...
- 【转】c#中@的3种作用
源地址:https://www.cnblogs.com/linkbiz/p/6380814.html
- IO相关3(string流)
sstream 头文件定义了三个类型来支持内存 IO,这些类型可以向 string 写入数据,从 string 读取数据,就像 string 是一个 IO 流一样. istringstream 从 s ...
- 从HDU1004来看C++<map>
最近做题有点浮躁~于是从HDU第一题开始刷,刷到1004题的时候突发奇想来复习一发很久没有用到过的map 题意是给你n个气球,每个气球有一种颜色,让你求出数量最多的气球颜色 因为颜色是气球数量的识别关 ...
- org.apache.storm.utils.NimbusLeaderNotFoundException: could not find leader nimbus from seed hosts["datanode9"]. Did you specify a valid of nimbus hosts for config nimbus.seeds?
出现这个异常的原因主要是zookeeper没有正常工作引起的.可以在storm-conf-storm.yaml中设置 storm.zookeeper.servers: -"zookeeper ...
- ajax(Asynchronous JavaScript and XML) 异步js或者xml
1.XMLHttpRequest 对象:向服务器发送局部的请求,异步获取执行 a.浏览器支持 b.语法: xmlhttp==new XMLHttpRequest(); xmlhttp.open(&qu ...
- django form tips
1.form将获取的参数传递到field 2.field中的函数 to_python 数据库到python中变量 get_prep_value python变量到数据库 validate 验证,也可以 ...