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语句:

  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.Tb1.objects.exclude(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.Tb1.objects.exclude(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=).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': '我是急急急'}
  12. 正则匹配
            # regex正则匹配,iregex 不区分大小写
            #
            # Entry.objects.get(title__regex=r'^(An?|The) +')
            # Entry.objects.get(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 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操作、序列化操作的更多相关文章

  1. Django之model补充:一对多、跨表操作

    表结构概述 model.py : class Something(models.Model): name = models.CharField(max_length=32) class UserTyp ...

  2. Django(八)下:Model操作和Form操作、序列化操作

    二.Form操作 一般会创建forms.py文件,单独存放form模块. Form 专门做数据验证,而且非常强大.有以下两个插件: fields :验证(肯定会用的) widgets:生成HTML(有 ...

  3. Django之Model操作

    Django之Model操作 本节内容 字段 字段参数 元信息 多表关系及参数 ORM操作 1. 字段 字段列表 AutoField(Field) - int自增列,必须填入参数 primary_ke ...

  4. Python之路【第二十二篇】:Django之Model操作

    Django之Model操作   一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bi ...

  5. python第一百一十一天 --Django 6 model 的相关操作

    创建数据库,设计表结构和字段 使用 MySQLdb 来连接数据库,并编写数据访问层代码 业务逻辑层去调用数据访问层执行数据库操作 import MySQLdb def GetList(sql): db ...

  6. Django使用普通表单、Form、以及modelForm操作数据库方式总结

    Django使用普通表单.Form.以及modelForm操作数据库主要应用于增删该查的情景下,流程通用如下,只是实现方式不一样: 进入填写表单页面: 在表单页面填写信息,并提交: 表单数据验证 验证 ...

  7. day23 Model 操作,Form 验证以及序列化操作

    Model 操作 1创建数据库表 定制表名:       普通索引:             创建两个普通索引,这样就会生成两个索引文件   联合索引:           为了只生成一个索引文件,才 ...

  8. Django之Model相关操作

    一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列,必须填入参数 pr ...

  9. django之model,crm操作

    一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列,必须填入参数 pr ...

随机推荐

  1. 基于Haar特征的Adaboost级联人脸检测分类器

    基于Haar特征的Adaboost级联人脸检测分类器基于Haar特征的Adaboost级联人脸检测分类器,简称haar分类器.通过这个算法的名字,我们可以看到这个算法其实包含了几个关键点:Haar特征 ...

  2. JavaScript随机数组(数组、随机、取整、取值的过程)

      <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&q ...

  3. 【转】VS2010不能引用System.Data.OracleClient解决方法

    源地址:http://blog.csdn.net/iloli/article/details/8484674

  4. GitHub 十大 CI 工具

    简评:GitHub 上最受欢迎的 CI 工具. 持续集成(Continuous integration)指的是,频繁地(一天多次)将代码集成到主干. 持续集成工具让产品可以快速迭代,同时还能保持高质量 ...

  5. C++20草案中的宇宙飞船运算符(<=>,spaceship operator)

    C++20草案中的宇宙飞船运算符(<=>,spaceship operator) Herb Sutter提议的新三路运算符<=>已经被合入C++20草案中. 宇宙飞船运算符(h ...

  6. 静态库(.a)与动态库(.so)的简明介绍

    静态库(.a)与动态库(.so)的简明介绍 gcc有很多关于静态库,动态库的选项如-l,-L,-fPIC,-shared -Wl,-soname,看着很复杂容易混淆,其实静态库和动态库都是应需而生,只 ...

  7. SQL里的real类型和tinyint类型在C#里分别对应类型

  8. redis中使用lua脚本

    lua脚本 Lua是一个高效的轻量级脚本语言,用标准C语言编写并以源代码形式开放, 其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能 使用脚本的好处 1.减少网络开销,在Lua脚 ...

  9. JSP使用Struts2标签库报错

    JSP中使用<%@ taglib prefix="s" uri="/struts-tags" %>报错:Cannot find the tag li ...

  10. python学习之路---day21--模块和栈

    模块和栈 一:计数模块collections 基础版本: s="qwewsfdfjiehrfqweqweqwqewq" dic={} for el in s: dic[el]=di ...