• Python Day 61 Django框架、Django框架ORM一对一表操作、Django列类型(重点)、自定义列类型、Django-amdin自带管理后台


      #内容回顾

    ORM查询:
        
        1. 基本查询:
            all() : queryset [(obj), obj,....]
            first : 查询第一行 obj
            last  :查询最后一行 obj
            values: 查询指定的列  quertset[{name:'zekai', "age":12},....]
            values_list:  quertset[('zekai', 12),....]
        
        2. 高级查询:
            in: filter(id__in=[1,2,3])
            not in: exclude(id__in=[1,2,3])
            like %xxx%: filter(name__contains)
            like %xxx: filter(name__endswith)
            like xxx%: filter(name__startswith)
            
            between ... and : filter(id__range=[2,5])
            
            limit: .all()[10:20]  分页
            
            order by: .all().order_by('id') : asc '-id': desc
                      .all().order_by('id', '-name')
            
            group by: .values('name').annotate(xx=Count('id')).filter(xx__lt=3)
                      filter().values('name').annotate(xx=Count('id')).filter(xx__lt=3)
            
            only: 支取某一列的值, only('name') :id也会取出来
            defer: 除了某几列之外的 所有 defer('id') : id也会取出来
            using: 指定某一个数据库
            count(): 总共多少行
            filter(id__lt=3)
            
            and : filter(id=2, name='xxx')
            
            or: Q(Q(id=3) | Q(name='xxx')) & Q(id=3)
            
            F: F('age') + 1
            raw: 原生SQL
            connection : 类似pymysql
            
            
        3. 一对多:
            正向查询:
                objs = models.xxx.objects.all()
                for obj in objs:
                    obj.外键.name
            
            反向查询:
                表名小写_set.all()
            
            .values: models.xxx.objects.filter('ut__name')
            .values_list
            
        
        4. 多对多:
            
            djagno:
                manytomanyfiled: 
                    只创建两列  
                    
            自己定制:
                写第三张表
                
            
        5. 删除:
            filter().delete()
            
            ps:
                级联删除
                ForeignKey(on_delete=models.CASCADE)
                
                CASCADE: 级联删除  默认
                SET_NULL: 取消级联删除
        
        6. update:
            filter。update(name='zekai')
    View Code

      ##Django框架ORM一对一表操作

    #1、列子:
        
        用户表(母表):
            id    name   age   
            1     icon   18
        
    
        
        薪水表(子表):
            id    money   us_id
             1      2000     1   (只能出现一次)
    
    class UserInfo(models.Model):
        name = models.CharField(max_length=32)
        age = models.CharField(max_length=32)
        
    
    class Salary(models.Model):
        money = models.CharField(max_length=32)
        us = models.OneToOneField("UserInfo")
    
    #2、一对一新增操作和其他的基本没区别:
            # models.UserInfo.objects.create(name='icon',age=18)
            # models.Salary.objects.create(money=3000,us_id=1)
    #3、一对一查询(反向查询有区别):
        ### 查询:
        ## 正向查询(子表查母表):
        ### Django版本为1.11.22 :res.us.name
        ### Django版本为1.11.10 : res.母表表名小写.name
        res = models.Salary.objects.filter(money="3000").first()
        print(res.us.name)
    
    
        ### 反向查询(母表查子表)
        ### obj.子表小写.子表列名 : res.salary.money
        res = models.UserInfo.objects.filter(name='icon').first()
        print(res.salary.money)

       ##Django列类型(重点********)

    #两种比较    mysql                                     django
                
            tinyint                                         无
            smallint(unsigned)        SmallIntegerField (PositiveSmallIntegerField)
    #数字    int (unsigned))             IntegerField   (PositiveIntegerField)
            mediumint                                    无
            bigint(unsigned)            BigIntegerField
            
            float                                  FloatField
            decimal(5,2) : 200.23                  DecimalField
            
            
            char                                     无
    #字符串    varchar                               CharFiled
            text                                 TextField
            
            
    #时间     datetime (2019-7-17 12:23:34)    DateTimeField        
             date      (2019-7-17)              DateField
             
             
        - 参数:
            max_length=32
            null=True  : 可以设置为null
            db_index=True : 设置索引
            default : 设置默认值
            unique : 设置唯一索引
                
            db_column: 设置一个列名
            
            unique_together: 联合唯一索引
            index_together :普通联合索引
                class Meta:
                    unique_together = (
                        ('money', 'us_id'),
                        ....
                    )
                    index_together = (
                        ('money', '')
                        ....
                    )
    #自定义char类型字段:因为django没有char类型,所以可以自定义
       class MyCharField(models.Field):
         def __init__(self,max_length,*args,**kwargs):
           self.max_length = max_length
           super().__init__(max_length=max_length,*args,**kwargs)
    
    
         def db_type(self, connection):
           return 'char(%s)'%self.max_length
     

       ##Django-amdin自带管理后台(了解即可)

    djagno-admin:
        django自带的管理后台系统
            命令生成:
                python3 manage.py  createsuperuser
        想要管理自己生成的表:
            admin.py:
                from app01 import models
                admin.site.register(models.UserInfo)
            
        
            django-admin中的列类型(一下的列类型只是在admin中起作用):
                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格式的验证
                FileField(Field)
        
            djagno-admin中的参数 :
                verbose_name        Admin中显示的字段名称        
        
                blank               Admin中是否允许用户输入为空
                editable            Admin中是否可以编辑
                help_text           Admin中该字段的提示信息
    
                choices             Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
                choices = (
                    (1, ''),
                    (2, '')
                )
                gender = models.IntegerField(choices=chocies)
                
                id name  gender (男女)
  • 相关阅读:
    Maidsafe-去中心化互联网白皮书
    The Top 20 Cybersecurity Startups To Watch In 2021 Based On Crunchbase
    Top 10 Blockchain Security and Smart Contract Audit Companies
    The 20 Best Cybersecurity Startups To Watch In 2020
    Blockchain In Cybersecurity: 11 Startups To Watch In 2019
    004-STM32+BC26丨260Y基本控制篇(阿里云物联网平台)-在阿里云物联网平台上一型一密动态注册设备(Android)
    涂鸦开发-单片机+涂鸦模组开发+OTA
    000-ESP32学习开发-ESP32烧录板使用说明
    03-STM32+Air724UG远程升级篇OTA(阿里云物联网平台)-STM32+Air724UG使用阿里云物联网平台OTA远程更新STM32程序
    03-STM32+Air724UG远程升级篇OTA(自建物联网平台)-STM32+Air724UG实现利用http/https远程更新STM32程序(TCP指令,单片机程序检查更新)
  • 原文地址:https://www.cnblogs.com/liangzhenghong/p/11203780.html
Copyright © 2020-2023  润新知