zoukankan      html  css  js  c++  java
  • day63 django--ORM

    一,ORM常用字段

    #AutoField:
        int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列。
    
    #IntegerField
         一个整数类型,范围在 -2147483648 to 2147483647#CharField
         字符类型,必须提供max_length参数, max_length表示字符长度
    
    #DateField
        日期字段,日期格式  YYYY-MM-DD,相当于Python中的datetime.date()实例
    
    #DateTimeField
        日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime()实例

    二,字段合集(争取记忆)

     AutoField(Field)
            - int自增列,必须填入参数 primary_key=True
    
        BigAutoField(AutoField)
            - bigint自增列,必须填入参数 primary_key=True
    
            注:当model中如果没有自增列,则自动会创建一个列名为id的列
            from django.db import models
    
            class UserInfo(models.Model):
                # 自动创建一个列名为id的且为自增的整数列
                username = models.CharField(max_length=32)
    
            class Group(models.Model):
                # 自定义自增列
                nid = models.AutoField(primary_key=True)
                name = models.CharField(max_length=32)
    
        SmallIntegerField(IntegerField):
            - 小整数 -32768 ~ 32767
    
        PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
            - 正小整数 0 ~ 32767
        IntegerField(Field)
            - 整数列(有符号的) -2147483648 ~ 2147483647
    
        PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField)
            - 正整数 0 ~ 2147483647
    
        BigIntegerField(IntegerField):
            - 长整型(有符号的) -9223372036854775808 ~ 9223372036854775807
    
        BooleanField(Field)
            - 布尔值类型
    
        NullBooleanField(Field):
            - 可以为空的布尔值
    
        CharField(Field)
            - 字符类型
            - 必须提供max_length参数, max_length表示字符长度
    
        TextField(Field)
            - 文本类型
    
        EmailField(CharField):
            - 字符串类型,Django Admin以及ModelForm中提供验证机制
    
        IPAddressField(Field)
            - 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制
    
        GenericIPAddressField(Field)
            - 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
            - 参数:
                protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6"
                unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启此功能,需要protocol="both"
    
        URLField(CharField)
            - 字符串类型,Django Admin以及ModelForm中提供验证 URL
    
        SlugField(CharField)
            - 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)
    
        CommaSeparatedIntegerField(CharField)
            - 字符串类型,格式必须为逗号分割的数字
    
        UUIDField(Field)
            - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证
    
        FilePathField(Field)
            - 字符串,Django Admin以及ModelForm中提供读取文件夹下文件的功能
            - 参数:
                    path,                      文件夹路径
                    match=None,                正则匹配
                    recursive=False,           递归下面的文件夹
                    allow_files=True,          允许文件
                    allow_folders=False,       允许文件夹
    
        FileField(Field)
            - 字符串,路径保存在数据库,文件上传到指定目录
            - 参数:
                upload_to = ""      上传文件的保存路径
                storage = None      存储组件,默认django.core.files.storage.FileSystemStorage
    
        ImageField(FileField)
            - 字符串,路径保存在数据库,文件上传到指定目录
            - 参数:
                upload_to = ""      上传文件的保存路径
                storage = None      存储组件,默认django.core.files.storage.FileSystemStorage
                width_field=None,   上传图片的高度保存的数据库字段名(字符串)
                height_field=None   上传图片的宽度保存的数据库字段名(字符串)
    
        DateTimeField(DateField)
            - 日期+时间格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ]
    
        DateField(DateTimeCheckMixin, Field)
            - 日期格式      YYYY-MM-DD
    
        TimeField(DateTimeCheckMixin, Field)
            - 时间格式      HH:MM[:ss[.uuuuuu]]
    
        DurationField(Field)
            - 长整数,时间间隔,数据库中按照bigint存储,ORM中获取的值为datetime.timedelta类型
    
        FloatField(Field)
            - 浮点型
    
        DecimalField(Field)
            - 10进制小数
            - 参数:
                max_digits,小数总长度
                decimal_places,小数位长度
    
        BinaryField(Field)
            - 二进制类型

    三,自定义字段

    class UnsignedIntegerField(models.IntegerField):
        def db_type(self, connection):
            return 'integer UNSIGNED'
    class FixedCharField(models.Field):
        """
        自定义的char类型的字段类
        """
        def __init__(self, max_length, *args, **kwargs):
            super().__init__(max_length=max_length, *args, **kwargs)
            self.length = max_length
    
        def db_type(self, connection):
            """
            限定生成数据库表的字段类型为char,长度为length指定的值
            """
            return 'char(%s)' % self.length
    
    
    class Class(models.Model):
        id = models.AutoField(primary_key=True)
        title = models.CharField(max_length=25)
        # 使用上面自定义的char类型的字段
        cname = FixedCharField(max_length=25)
    自定义char类型字段

    四,ORM字段与数据库实际字段的对应关系

    对应关系:
        'AutoField': 'integer AUTO_INCREMENT',
        'BigAutoField': 'bigint AUTO_INCREMENT',
        'BinaryField': 'longblob',
        'BooleanField': 'bool',
        'CharField': 'varchar(%(max_length)s)',
        'CommaSeparatedIntegerField': 'varchar(%(max_length)s)',
        'DateField': 'date',
        'DateTimeField': 'datetime',
        'DecimalField': 'numeric(%(max_digits)s, %(decimal_places)s)',
        'DurationField': 'bigint',
        'FileField': 'varchar(%(max_length)s)',
        'FilePathField': 'varchar(%(max_length)s)',
        'FloatField': 'double precision',
        'IntegerField': 'integer',
        'BigIntegerField': 'bigint',
        'IPAddressField': 'char(15)',
        'GenericIPAddressField': 'char(39)',
        'NullBooleanField': 'bool',
        'OneToOneField': 'integer',
        'PositiveIntegerField': 'integer UNSIGNED',
        'PositiveSmallIntegerField': 'smallint UNSIGNED',
        'SlugField': 'varchar(%(max_length)s)',
        'SmallIntegerField': 'smallint',
        'TextField': 'longtext',
        'TimeField': 'time',
        'UUIDField': 'char(32)',

    五,ORM常用字段的参数

    null                     数据库中字段是否可以为空
    db_column           数据库中字段的列名
    default                 数据库中字段的默认值
    primary_key         数据库中字段是否为主键
    db_index              数据库中字段是否可以建立索引
    unique                  数据库中字段是否可以建立唯一索引
    unique_for_date    数据库中字段【日期】部分是否可以建立唯一索引
    unique_for_month  数据库中字段【月】部分是否可以建立唯一索引
    unique_for_year     数据库中字段【年】部分是否可以建立唯一索引
    
    null=True      可以为空
    default='xx'   默认值
    unique=True  唯一约束
    
    DatetimeField、TimeField和Datefield独有:
        auto_now_add=True    --> 创建数据记录的时候会把当前时间添加到数据库
        auto_now=True        --> 每次更新数据记录的时候会更新该字段

      choice参数的字段

    obj.get_字段_display()      获取choice字段的显示值

      

    六,建表的元信息

      ORM对应的类里面包含另一个Meta类,而Meta类封装了一些数据库的信息

        

    #主要字段如下:
    db_table  #ORM在数据库中的表名默认是app_类名,可以通过db_table重写表名
    index_together  #联合索引
    unique_together  #联合唯一索引
    ording  #指定默认按什么字段排序,只有设置了该属性,查询到的结果才可以被reverse()

      实例:

    class Meta:
        db_table = '表名'     控制建表的表名
        unique_together = (('ip','port'))  联合唯一索引
        index_together = (('pub_date','deadline'))  联合索引
    #元信息--联合唯一
    class Site(models.Model):
        ip = models.GenericIPAddressField()
        port = models.IntegerField()
            
        class Meta:
           unique_together=(('ip','port'))
    
    #元信息--联合索引
    class Site(models.Model):
        ip = models.GenericIPAddressField()
        port = models.IntegerField()
            
        class Meta:
           index_together=(('ip','port'))

    七,必知必会13条class.objects.方法

    1.返回QuerySet列表类型的
        1.filter()
        2.all()
        3.exclude()
        4.orday_by('字段')   根据xx排序,返回的是列表,列表中是对象
            order_by('-字段')    根据xx排序(反序),返回的是列表,列表中是对象
        5.reverse()    从结果中反序
        6.distinct()    从结果中剔除重复记录
                
        7.values('字段')     返回的是列表,列表中不是对象而是字典
        8.values_list()   返回的是列表,列表中不是对象而是元组
                
                
    2.返回具体对象的
        1.get()
        2.firest()    返回第一个对象
        3.last()     返回最后一个对象
    3.返回布尔值
        1.exists()   判断表是否有数据,返回布尔值
    4.返回数字的
        1.count()    从结果中统计数量

    八,单表查询的双下划线(支持链式操作)

    models.Tb1.objects.filter(id__lt=10, id__gt=1)   # 获取id大于1 且 小于10的值
     
    models.Tb1.objects.filter(id__in=[11, 22, 33])   # 获取id等于11、22、33的数据
    models.Tb1.objects.exclude(id__in=[11, 22, 33])  # not in
     
    models.Tb1.objects.filter(name__contains="ven")  # 获取name字段包含"ven"的
    models.Tb1.objects.filter(name__icontains="ven") # icontains大小写不敏感
     
    models.Tb1.objects.filter(id__range=[1, 3])      # id范围是1到3的,等价于SQL的bettwen and
     
    类似的还有:startswith,istartswith, endswith, iendswith 
    
    date字段还可以:
    models.Class.objects.filter(first_day__year=2017)
    1.filter(id__lt=3)            --> id<3
    2.filter(id__lte=3)            --> id<=3
    3.filter(id__gt=3)            --> id>3
    4.filter(id__gte=3)            --> id>=3
    5.filter(id__in=[1,3,5])    --> id=1、3、5
    6.filter(name__contains='sb')    --> name里面有sb的
    7.filter(name__icontains='sb')  --> 忽略大小写,name里面有sb的
    8.filter(name__endswith='sb')    --> name里面已sb结尾的,加i忽略大小写
    9.filter(birthday__month=11)    --> 出生是11月的

    九,补充

    #settings.py中的配置
    USE_TZ = False 是否使用时区 #在一个python文件查询数据库 import os if __name__ == "__main__": os.environ.setdefault("DJANGO_SETTINGS_MODULE","about_orm.settings") import django django.setup() from app01.models import UserInfo
  • 相关阅读:
    poj3278 Catch That Cow
    poj2251 Dungeon Master
    poj1321 棋盘问题
    poj3083 Children of the Candy Cor
    jvm基础知识—垃圾回收机制
    jvm基础知识1
    java面试基础必备
    java soket通信总结 bio nio aio的区别和总结
    java scoket aIO 通信
    java scoket Blocking 阻塞IO socket通信四
  • 原文地址:https://www.cnblogs.com/lianyeah/p/9932350.html
Copyright © 2011-2022 走看看