Python元類使用之ORM原理
# _*_ coding: utf-8 _*_
class Field(object):
def __init__(self, name, column_type):
self.name = name
self.column_type = column_type
def __str__(self):
return '<%s:%s>' % (self.__class__.__name__, self.name)
class StringField(Field):
def __init__(self, name) :
super(StringField, self).__init__(name, 'varchar(100)')
class IntegerField(Field):
def __init__(self, name):
super(IntegerField, self).__init__(name, 'bigint')
class ModelMetaclass(type):
def __new__(cls, name, bases, attrs):
if name=='Model':
return type.__new__(cls, name, bases, attrs)
print('Found model: %s' % name) # User
mappings = dict()
for k, v in attrs.items():
if isinstance(v, Field):
print('Found mapping: %s ==> %s' % (k, v))
mappings[k] = v
for k in mappings.keys():
attrs.pop(k)
attrs['__mappings__'] = mappings # 儲存屬性和列的對映關係
attrs['__table__'] = name # 假設表名和類名一致
return type.__new__(cls, name, bases, attrs)
class Model(dict, metaclass=ModelMetaclass):
def __init__(self, **kw):
super(Model, self).__init__(**kw)
def __getattr__(self, key):
try:
return self[key]
except KeyError:
raise AttributeError(r"'Model' object has no attribute '%s'" % key)
def __setattr__(self, key, value):
self[key] = value
def save(self):
fields = []
args = []
for k, v in self.__mappings__.items():
fields.append(v.name)
arg = getattr(self, k)
args.append(str(arg))
sql = 'insert into %s (%s) values (%s)' % (self.__table__, ','.join(fields), ','.join(args))
print('SQL: %s' % sql)
print('ARGS: %s' % str(args))
class User(Model):
# 定義類的屬性到列的對映:
id = IntegerField('id')
name = StringField('username')
email = StringField('email')
password = StringField('password')
if __name__ == "__main__":
u = User(id=12345, name='Michael', email='[email protected]', password='my-pwd')
u.save()
相關推薦
使用python 元類實現ORM關係對映
元類實現ORM 1. ORM是什麼 ORM 是 python程式語言後端web框架 Django的核心思想,“Object Relational Mapping”,即物件-關係對映,簡稱ORM。 一個句話理解就是:建立一個例項物件,用建立它的類名當做資料表名,用建立它的類屬性對應資料表的
Python元類使用之ORM原理
# _*_ coding: utf-8 _*_ class Field(object): def __init__(self, name, column_type): self.name = name self.col
Python中的元類編寫ORM框架
部落格轉載: https://blog.csdn.net/givemefive_y/article/details/79806348 https://blog.csdn.net/eye_water/article/details/78777870 https://www.liaoxue
Python-元類程式設計實現ORM
Python實現元類程式設計主要通過兩種方法: type函式 metaclass元類 動態語言和靜態語言最大的不同,就是函式和類的定義,不是編譯時定義的,而是執行時動態建立的。 (一) type()函式 type(name, bases, attrs)
由ORM談Python元類
本文主要介紹了什麼是類,如何動態的建立類,什麼是元類,類的_metaclass_屬性以及如何自己實現ORM。 上篇文章回顧:淺談TLS 1.3 在談Python元類之前,我們先來看看ORM是什麼: ORM 為Object Relational Map
python 元類的使用(orm框架搭建)
元類是python面向物件程式設計裡面很難理解的一個東西,所謂元類的就是類的類,它用來建立類,在python裡面,類也是一個物件!!!.元類的作用就是動態的建立類. 在python裡面type就是元類,我們所有的class定義類的語句都會被python解釋為使
Python元類實戰,通過元類實現資料庫ORM框架
本文始發於個人公眾號:**TechFlow**,原創不易,求個關注 今天是Python專題的第19篇文章,我們一起來用元類實現一個簡易的ORM資料庫框架。 本文主要是受到了廖雪峰老師Python3入門教程的啟發,不過廖老師的部落格有些精簡,一些小白可能看起來比較吃力。我在他的基礎上做了一些補充和註釋
python 元類的簡單解釋
.html www ren 有用 copy tle 例子 sky -i 本文轉自博客:http://www.cnblogs.com/piperck/p/5840443.html 作者:piperck python 類和元類(metaclass)的理解和簡單運用 (一) p
Python 元類
tac sorted this result init one ati handler ... http://ningning.today/2017/01/25/python/simple-python-metaclass/ https://stackoverflow.co
Python學習---django之ORM語法[對象關系映射]180124
簡單 try arc python table varchar href 都是 定義 ORM語法[對象關系映射] ORM: 用面向對象的方式去操作數據庫的創建表以及增刪改查等操作。 優點:1 ORM使得我們的通用數據庫交互變得簡單易行,而且完全不用考慮該死的SQL語句。快速
元類應用ORM實現
ring sem 元類 cls all 類名 ble field new 首先看下一個簡單的例子 # 需求 import numbers class Field: pass class IntField(Field): # 數據描述符 def
Python源碼之with原理
close elf 調用 數據庫 param 最後一行 per etc pen 需求 我們平時對文件和數據庫操作的時候,執行的步驟都是打開---操作數據---關閉,這是正常的操作順序,但有時候難免會在操作完數據之後忘記關閉文件對象或數據庫,而使用with正是可以解決這
筆記-python-元類metaclass
elf vat bsp 實現 字典 tac self 步驟 附錄 筆記-python-元類metaclass 1. 元類 1.1. 類也是對象 class Person(object): pass 上面的代碼會在內存中創建一個類,它也是對象
python七類之整型布林值
一、數字大小與位的關係 .bit_length #查詢數字的位數的方法 布林值(bool)與數字之間的轉換 True False n =bool (6) 輸出True #數字和布林值可以相互轉換 int(True) 輸出1  
Python 元類,type建立類物件
type("123") 可以檢視變數的型別;同時 type("類名",(父類),{類屬性:值,類屬性2:值}) 可以建立一個類。 在Python中不建議一個函式具有不同的功能(過載);type()具有不同的功能是為了相容之前的版本。 類可以建立例項物件,類物件是由元類建立的。 (
Python 元類 (MetaClass) 小教程
可能是 Ruby 帶的頭,大家喜歡把“超程式設計”稱作魔法,其實哪有什麼魔法,一切都是科學。而 meta classes 就是 Python 裡最魔法的科學,也是 99% 的人用不到的科學。只是誰還不想學點魔法呢? (本文使用的語法僅在 Python 3 下有效) #爺爺 = 元爸爸 Meta is a p
什麼是 Python 元類
龜叔發明了 Python,然後集成了一堆概念在這門語言裡面,比如:迭代器,裝飾器,函式,生成器,類,物件,協程等等。 這些概念對初學者似乎沒一個好懂的,不過還有比這更難的概念,它是 Python 世界中的造物主,雖然我們很少去直接使用它,但天天都在用,它就是今天的主角------元類。 今天
python 元類 metaclass
一、什麼是元類 python中一切皆為物件 # -*- encoding:utf-8 -*- class OldboyTeacher(object): school='oldboy'
深入理解python元類
相對python的簡單來說,元類顯得有些複雜了,但是理解元類會讓你的python程式碼威力大大增加,理解元類需要了解一些python背後的東西,相信通過本文的敘述你能很快理解運用這一利器。 類的本質 首先我們思考下,python中的類是什麼,如下程式碼: class C
python元類學習筆記
一 對於python類帶括號和不帶括號的區別: class User(object): def __init__(self, name): self.name = name a = User # a和User等價 print(a) print(a == User) a.