<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
存取或者修改描述器物件的屬性時無法觸發__setattr__等方法,只會觸發描述器類內部的__set__,__get__,__delete__方法.
ORM模型:類名對應表名,物件對應的資料行,類屬性對應資料行的各欄位,有幾個表欄位,就係結幾個類屬性;往表中增加資料就是建立物件,每建立一個物件,就是增加一行資料記錄。
ORM框架的功能:
1.建立模型類和表之間的對應關係,允許我們通過物件導向的方式運算元據庫。
2.根據設計的模型類生成資料庫中的表格。
3.通過方便的設定就可以進行資料庫的切換。
MySql的常用資料型別:
1.整數:int,bit
2.小數:decimal(decimal表示浮點數,decimal(5,2)表示共計5位數,小數佔2位)
3.字串:varchar(可變長度),char(不可變長度)
4.日期時間:date,time,datetime
5.列舉型別:enum
模型類案例:
""" django的ORM模型欄位 BooleanField: 布林欄位,True或False CharField(max_length=最大長度): 字串,引數max_length表示最大字元個數 IntegerField: 整數 """ class TestReport(BaseTable): class Meat: verbose_name = '測試報告' db_table = "TestReport" report_name = models.CharField(max_length=40, null=False) start_at = models.CharField(max_length=40, null=True) status = models.BooleanField() testRun = models.IntegerField() successes = models.IntegerField() reports = models.TextField()
""" 只要一個類中出現了: __get__(self,instance,owner) __set__(self,instance,value) __delete__(self,instance) __set_name__(self,owner,name) 中的任意一個方法,這個類就不是一個普通的類了, 應被稱為: 描述器類(應用在ORM模型中) """ class Field(object): """ 只要一個類中出現了以下任意一個方法,這個類就是一個描述器類 """ def __get__(self, instance, owner): pass def __set__(self, instance, value): print('---set---方法被觸發了') def __delete__(self, instance): pass class Model(object): attr = Field() # attr是一個描述器物件,修改時無法觸發__setattr__等方法, # 只能觸發描述器類內部的__set__方法 if __name__ == '__main__': m = Model() m.attr = 666 # 嘗試修改attr屬性 print(m.attr) # 輸出: ---set - --方法被觸發了 None
class Field(object): """ 只要一個類中出現了以下任意一個方法,這個類就是一個描述器類 """ def __get__(self, instance, owner): pass def __set__(self, instance, value): """ :param instance: 修改的物件 :param value: 修改的值 :return: """ print('---set---方法被觸發了') self.value = value print(self) # <__main__.Field object at 0x7fecc01f8a30> print(instance) # <__main__.Model object at 0x7fecc01f8a00> print(value) # 666 def __delete__(self, instance): pass class Model(object): attr = Field() # attr是一個描述器物件,修改時無法觸發__setattr__等方法, # 只能觸發描述器類內部的__set__方法 if __name__ == '__main__': m = Model() print(m) # <__main__.Model object at 0x7fecc01f8a00>,與instance相同 m.attr = 666 # 嘗試修改attr屬性
""" 只要一個類中出現了: __get__(self,instance,owner) __set__(self,instance,value) __delete__(self,instance) __set_name__(self,owner,name) 中的任意一個方法,這個類就不是一個普通的類了, 應被稱為: 描述器類(應用在ORM模型中) """ class Field(object): """ 只要一個類中出現了以下任意一個方法,這個類就是一個描述器類 """ def __get__(self, instance, owner): print('---get---方法被觸發了') def __set__(self, instance, value): """ :param instance: 修改的物件 :param value: 修改的值 :return: """ print('---set---方法被觸發了') self.value = value def __delete__(self, instance): pass class Model(object): attr = Field() # attr是一個描述器物件,修改時無法觸發__setattr__等方法, # 只能觸發描述器類內部的__set__方法 if __name__ == '__main__': m = Model() m.attr = 666 # 嘗試修改attr屬性 print(m.attr) # 輸出: ---set - --方法被觸發了 ---get - --方法被觸發了 None
""" 只要一個類中出現了: __get__(self,instance,owner) __set__(self,instance,value) __delete__(self,instance) __set_name__(self,owner,name) 中的任意一個方法,這個類就不是一個普通的類了, 應被稱為: 描述器類(應用在ORM模型中) """ class Field(object): """ 只要一個類中出現了以下任意一個方法,這個類就是一個描述器類 """ def __get__(self, instance, owner): print('---get---方法被觸發了') print(instance) # <__main__.Model object at 0x7f80b81a09d0> print(owner) # <class '__main__.Model'> return self.value def __set__(self, instance, value): """ :param instance: 修改的物件 :param value: 修改的值 :return: """ print('---set---方法被觸發了') self.value = value def __delete__(self, instance): pass class Model(object): attr = Field() # attr是一個描述器物件,修改時無法觸發__setattr__等方法, # 只能觸發描述器類內部的__set__方法 if __name__ == '__main__': m = Model() m.attr = 666 # 嘗試修改attr屬性 print(m.attr) # 666 # 輸出: ---set - --方法被觸發了 ---get - --方法被觸發了 < __main__.Model object at 0x7f80b81a09d0 > < class '__main__.Model'> 666
""" 只要一個類中出現了: __get__(self,instance,owner) __set__(self,instance,value) __delete__(self,instance) __set_name__(self,owner,name) 中的任意一個方法,這個類就不是一個普通的類了, 應被稱為: 描述器類(應用在ORM模型中) """ class Field(object): """ 只要一個類中出現了以下任意一個方法,這個類就是一個描述器類 """ def __get__(self, instance, owner): return self.value def __set__(self, instance, value): """ :param instance: 修改的物件 :param value: 修改的值 :return: """ print('---set---方法被觸發了') self.value = value def __delete__(self, instance): print('---delete---方法被觸發了') class Model(object): attr = Field() # attr是一個描述器物件,修改時無法觸發__setattr__等方法, # 只能觸發描述器類內部的__set__方法 if __name__ == '__main__': m = Model() m.attr = 666 # 嘗試修改attr屬性 del m.attr # ---delete---方法被觸發了 print(m.attr) # None # 輸出: ---set - --方法被觸發了 ---delete - --方法被觸發了 666
""" 只要一個類中出現了: __get__(self,instance,owner) __set__(self,instance,value) __delete__(self,instance) __set_name__(self,owner,name) 中的任意一個方法,這個類就不是一個普通的類了, 應被稱為: 描述器類(應用在ORM模型中) """ class Field(object): """ 只要一個類中出現了以下任意一個方法,這個類就是一個描述器類 """ def __get__(self, instance, owner): print('---get---方法被觸發了') print(instance) # <__main__.Model object at 0x7f80b81a09d0> print(owner) # <class '__main__.Model'> return self.value def __set__(self, instance, value): """ :param instance: 修改的物件 :param value: 修改的值 :return: """ print('---set---方法被觸發了') self.value = value def __delete__(self, instance): print('---delete---方法被觸發了') print(instance) # <__main__.Model object at 0x7ff61806a160> self.value = None class Model(object): attr = Field() # attr是一個描述器物件,修改時無法觸發__setattr__等方法, # 只能觸發描述器類內部的__set__方法 if __name__ == '__main__': m = Model() m.attr = 666 # 嘗試修改attr屬性 del m.attr # ---delete---方法被觸發了 print(m.attr) # None # 輸出: ---set - --方法被觸發了 ---delete - --方法被觸發了 < __main__.Model object at 0x7ff61806a160 > ---get - --方法被觸發了 < __main__.Model object at 0x7ff61806a160 > <class '__main__.Model'> None
""" 通過描述器實現ORM模型 """ class CharField(object): def __init__(self,max_length=20): self.max_length = max_length def __get__(self, instance, owner): return self.value def __set__(self, instance, value): # 首先判斷是否為空 if value is not None: # 再判斷是否是字串 if isinstance(value, str): # 再判斷長度是否符合要求 if len(value) <= self.max_length: self.value = value else: raise TypeError('length need less than {}'.format(self.max_length)) else: raise TypeError('need a str') else: raise TypeError("can not be None") def __delete__(self, instance): self.value = None class IntegerField(object): def __get__(self, instance, owner): return self.value def __set__(self, instance, value): # 首先判斷是否為空 if value is not None: # 再判斷是否是整數int if isinstance(value, int): self.value = value else: raise TypeError('need a int') else: raise TypeError("can not be None") def __delete__(self, instance): self.value = None class UserModel(object): # 定義使用者資訊的模型類 name = CharField(max_length=20) # 定義:name只能賦值為字串 pwd = CharField(max_length=40) age = IntegerField() # 定義:age只能賦值為整數 if __name__ == '__main__': user = UserModel() user.name = "春田" print(user.name) # 輸出: 春田 user.age = 130 print(user.age) # 輸出: 130 user.pwd = 'wsdgdgdrgerdsfs方式范德薩發阿瑟費薩法 sfa fda fsdf sdf fg' print(user.pwd) # 輸出: TypeError: length need less than 40
本篇文章就到這裡了,希望能夠給你帶來幫助,也希望您能夠多多關注it145.com的更多內容!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45