django(6)model表语句操作、Form操作、序列化操作

阅读: 评论:0

django(6)model表语句操作、Form操作、序列化操作

django(6)model表语句操作、Form操作、序列化操作

        # 单表操作,创建表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"),)# 创建联合唯一索引
  1. 查找日期为空的所有条数models.Entry.objects.filter(pub_date__isnull=True)
  2. 获取id等于11、22、33的数据models.Tb1.objects.filter(id__in=[11, 22, 33])
  3. 获取id不等于11、22、33的数据models.lude(id__in=[11, 22, 33])
  4. 获取name字段中包含‘ven’的所有数据models.Tb1.objects.filter(name__contains="ven")(区分大小写)
  5. 获取name字段中包含‘ven’的所有数据models.Tb1.objects.filter(name__icontains="ven")(不区分大小写,有的数据库不好使)
  6. 获取name字段中不包含‘ven’的所有数据models.lude(name__icontains="ven")
  7. 查询id在1-3范围内的所有数据models.Tb1.objects.filter(id__range=[1, 3])   
  8. 查询某字段以什么开始或结束的所有数据models.Tb1.objects.filter(startswith=‘ven’) 还有(istartswith, endswith, iendswith,)
  9. 升序排序models.Tb1.objects.filter(name='seven').order_by('id') 
  10. 降序排序models.Tb1.objects.filter(name='seven').order_by('-id') 
  11. values
    al = models.Article.objects.filter(article_type_id=1).values('id','title','content').first()#只获取符合条件的第一条,而且是字典形式
    values.first获取的结果是:
    {'id': 1, 'title': '你好', 'content': '我是对对对'}alls = models.Article.objects.filter(article_type_id=1).values('id','title','content')#获取全部数据,而且是QuerySet 形式
    values获取的结果是:
    <QuerySet [{'id': 1, 'title': '你好', 'content': '我是对对对'}, {'id': 2, 'title': '他好', 'content': '我是急急急'}]>
    通过for循环取出所有数据:
    {'id': 1, 'title': '你好', 'content': '我是对对对'}
    {'id': 2, 'title': '他好', 'content': '我是急急急'}

     

  12. 正则匹配
            # regex正则匹配,iregex 不区分大小写## (title__regex=r'^(An?|The) +')# (title__iregex=r'^(an?|the) +')
  13. 根据日期查询
            # 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)
  14. 分组查询
     # from dels 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.ly('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 pytzimport pytzpytz.all_timezonespytz.timezone(‘Asia/Shanghai’)"""

       20.写原生sql语句:models.DDD.objects.raw(‘原生sql语句’)

更多models操作,详见.html

 

二、专门为ajax操作做的数据序列化操作(json)

            第一种: import serializersv = 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)

 

转载于:.html

本文发布于:2024-01-31 18:05:51,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170669555130374.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:操作   表语   序列化   django   model
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23