zoukankan      html  css  js  c++  java
  • Django ORM

    常用字段

    AutoField

    自增的整型字段,必填参数 primary_key=True,则成为数据库的主键.无该字段时,Django会自动创建,一个model不能有两个AutoField字段

    IntegerField

    整数类型,数值的范围是 -2147483648 ~ 2147483647。

    CharField

    字符类型,必须提供max_length参数,max_length表示字符的长度

    DateField

    日期类型,日期格式为YYY-MM-DD,相当于Python中的datetime.date的实例

    参数:

    • auto_now :每次修改时修改为当前日期时间
    • auto_now_add:新创建对象时自动添加当前日期的时间
    • auto_now和auto_now_add和default参数是互斥的,不能同时设置。

    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)
            - 二进制类型
    View Code

    自定义字段

    自定义一个char类型字段

    class MyCharField(models.Field):
        """
        自定义的char类型的字段类
        """
        def __init__(self, max_length, *args, **kwargs):
            self.max_length = max_length
            super(MyCharField, self).__init__(max_length=max_length, *args, **kwargs)
     
        def db_type(self, connection):
            """
            限定生成数据库表的字段类型为char,长度为max_length指定的值
            """
            return 'char(%s)' % self.max_length

    使用自定义char类型字段:

    class Class(models.Model):
        id = models.AutoField(primary_key=True)
        title = models.CharField(max_length=25)
        # 使用自定义的char类型的字段
        cname = MyCharField(max_length=25)

    使用Admin

    在项目的APP下的admin.py中注册

    from django.contrib import admin
    from app01 import models
    admin.site.register(models.Person) #Person :类名

    在浏览器中输入地址访问

    http://127.0.0.1:8000/admin

    创建用户和密码,在Terminal中输入

    D:djangoorm>python manage.py createsuperuser #创建用户
    Username (leave blank to use 'wanglan'): admin  #如果不指定,默认电脑管理员的名字
    Email address: #邮件地址,可跳过
    Password:  #8位,不能纯数字,不能纯英文,密码是不可见的
    Password (again):  #确认密码
    Superuser created successfully.

    查看数据

    可以在models.py中添加__str__,方便查看

        def  __str__(self):
            return '{} - {} -  {} -  {}'.format(self.pid,self.name,self.age,self.birh)

    结果

    字段参数

    null :数据库中字段是否可以为空,默认False,不能为空
    blank: Admin 中是否允许用户输入为空,blank=True :输入可以为空
     db_column           数据库中字段的列名
        default             数据库中字段的默认值
        primary_key         数据库中字段是否为主键
        db_index            数据库中字段是否可以建立索引
        unique              数据库中字段是否可以建立唯一索引
        unique_for_date     数据库中字段【日期】部分是否可以建立唯一索引
        unique_for_month    数据库中字段【月】部分是否可以建立唯一索引
        unique_for_year     数据库中字段【年】部分是否可以建立唯一索引
     
        verbose_name        Admin中显示的字段名称
        editable            Admin中是否可以编辑
        help_text           Admin中该字段的提示信息
        choices             Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
                            如:gf = models.IntegerField(choices=[(0, '何穗'),(1, '大表姐'),],default=1)
     
        error_messages      自定义错误信息(字典类型),从而定制想要显示的错误信息;
                            字典健:null, blank, invalid, invalid_choice, unique, and unique_for_date
                            如:{'null': "不能为空.", 'invalid': '格式错误'}
     
        validators          自定义错误验证(列表类型),从而定制想要的验证规则
                            from django.core.validators import RegexValidator
                            from django.core.validators import EmailValidator,URLValidator,DecimalValidator,
                            MaxLengthValidator,MinLengthValidator,MaxValueValidator,MinValueValidator
                            如:
                                test = models.CharField(
                                    max_length=32,
                                    error_messages={
                                        'c1': '优先错信息1',
                                        'c2': '优先错信息2',
                                        'c3': '优先错信息3',
                                    },
                                    validators=[
                                        RegexValidator(regex='root_d+', message='错误了', code='c1'),
                                        RegexValidator(regex='root_112233d+', message='又错误了', code='c2'),
                                        EmailValidator(message='又错误了', code='c3'), ]
                                )

    Model Meta参数

     这个不是很常用

    class UserInfo(models.Model):
        nid = models.AutoField(primary_key=True)
        username = models.CharField(max_length=32)
     
        class Meta:
            # 数据库中生成的表名称 默认 app名称 + 下划线 + 类名
            db_table = "table_name"
     
            # admin中显示的表名称
            verbose_name = '个人信息'
     
            # verbose_name加s
            verbose_name_plural = '所有用户信息'
     
            # 联合索引 
            index_together = [
                ("pub_date", "deadline"),   # 应为两个存在的字段
            ]
     
            # 联合唯一索引
            unique_together = (("driver", "restaurant"),)   # 应为两个存在的字段
    View Code

    在Python脚本中调用Django环境

    import os
    
    if __name__ == '__main__':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "BMS.settings")  #BMS.settings:项目中settings中的路径
        import django
        django.setup()
    
        from app01 import models
    
        books = models.Book.objects.all()
        print(books)

     必知必会十三条

    import os
    
    if __name__ == '__main__':
        os.environ.setdefault("DJANGO_SETTINGS_MODULE", "orm.settings")
        import django
        django.setup()
    
        from app01 import models
    
        # all :获取所有的数据 QuerSet  对象列表
        # person = models.Person.objects.all()
        # print(person)
    
        #get :获取某一条数据  对象  获取不到或者获取都个就保错
        # person = models.Person.objects.get(pk=6)
        # print(person)
    
        #filter :获取满足条件的所有对象 QuerSet  对象列表
        # preson = models.Person.objects.filter(name='wanglan')
        # print(preson)
    
        #exclude :与筛选条件不匹配的对象
        # preson = models.Person.objects.exclude(name='wanglan')
        # print(preson)
    
        # values :获取数据字段的值  QuerySet  字典
        # valuse_list :获取数据字段的值 QuerySet  元组
        # preson = models.Person.objects.values()
        # preson = models.Person.objects.filter(name='wanglan').values()
        # preson = models.Person.objects.filter(name='wanglan').values('pid','name')
        # preson = models.Person.objects.filter(name='wanglan').values_list()
        # for i in preson:
        #     print(i)
    
    
        #order_by :排序,默认升序
        # preson = models.Person.objects.order_by('pid') #升序,可以有多个值
        # # preson = models.Person.objects.order_by('-pid')  #降序
        # print(preson)

    # #reverse : 对查询结果反向排序,通常只能在具有已定义顺序的QuerSet上调用 # preson = preson.reverse() # print(preson) #count :计数 # preson = models.Person.objects.filter(name='wanglan').count() # print(preson) # first :返回第一条记录 last :返回最后一条记录 # preson = models.Person.objects.filter(name='wanglan').first() # preson = models.Person.objects.filter(name='wanglan').last() # print(preson) # exists() :查询结果是否存在 返回True或False # preson = models.Person.objects.filter(pid=6).exists() # print(preson)
  • 相关阅读:
    Spring Cloud Hystrix Dashboard的使用 5.1.3
    Spring Cloud Hystrix 服务容错保护 5.1
    Spring Cloud Ribbon 客户端负载均衡 4.3
    Spring Cloud 如何实现服务间的调用 4.2.3
    hadoop3.1集成yarn ha
    hadoop3.1 hdfs的api使用
    hadoop3.1 ha高可用部署
    hadoop3.1 分布式集群部署
    hadoop3.1伪分布式部署
    KVM(八)使用 libvirt 迁移 QEMU/KVM 虚机和 Nova 虚机
  • 原文地址:https://www.cnblogs.com/wanglan/p/10317403.html
Copyright © 2011-2022 走看看