1. 程式人生 > >Python元類使用之ORM原理

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)

ORMPython

本文主要介紹了什麼是類,如何動態的建立類,什麼是元類,類的_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學習---djangoORM語法[對象關系映射]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.