zoukankan      html  css  js  c++  java
  • django源码分析---- Model类型&Field类型

    djiango在数据库这方式自己实现了orm(object relationship mapping 对象关系模型映射)、这个主要是用到python 元类这一

    项python中的高级技术来实现的。

    class ModelBase(type):
        def __new__(cls,name,bases,attrs):
            # .....
            pass
    
        pass
    
    class Model(metaclass=ModelBase):
        pass
    
    # 在这之后所有的用户自定义模型都继承自Model类
    
    class Person(Model):
        name=CharField(max_length=8)
        

    类就对应到了数据库中的一张表、而类的的属性就对应到了表中的列;如这里的Person类就对应到了person表,name属性就对应到了name列

    上面例子中name属性的数据类型是CharField类型、这种类型与数据库端的char类型对应;在django中所以的列类型都继承自Field类型

    class Feild(RegisterLookupMixin):
        pass
    
    class AutoField(Field):
    class BigAutoField(AutoField):
    class BooleanField(Field):
    class CharField(Field):
    class CommaSeparatedIntegerField(CharField):
    class DateTimeCheckMixin:
    class DateField(DateTimeCheckMixin, Field):
    class DateTimeField(DateField):
    class DecimalField(Field):
    class DurationField(Field):
    class EmailField(CharField):
    class FilePathField(Field):
    class FloatField(Field):
    class IntegerField(Field):
    class BigIntegerField(IntegerField):
    class IPAddressField(Field):
    class GenericIPAddressField(Field):
    class NullBooleanField(Field):
    class PositiveIntegerRelDbTypeMixin:
    class PositiveIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField):
    class PositiveSmallIntegerField(PositiveIntegerRelDbTypeMixin, IntegerField):
    class SlugField(CharField):
    class SmallIntegerField(IntegerField):
    class TextField(Field):
    class TimeField(DateTimeCheckMixin, Field):
    class URLField(CharField):
    class BinaryField(Field):
    class UUIDField(Field):

    ----

  • 相关阅读:
    Datediff的使用(统计本日,昨日,本周,本月)
    数据库之查询语句
    数据库之表关系
    数据库中的数据类型
    数据库概念和基本操作
    IO模型
    并发编程之协程
    GIL与多线程(线程池与进程池,同步异步阻塞非阻塞)
    并发编程之多线程
    并发编程之多进程
  • 原文地址:https://www.cnblogs.com/JiangLe/p/6722003.html
Copyright © 2011-2022 走看看