使用元类编写一个简单的ORM框架
来源:互联网 发布:大唐软件官网 编辑:程序博客网 时间:2024/05/16 12:13
使用元类编写一个简单的ORM框架
# -*- coding : utf-8 -*-class Field(object): '''filed''' 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): '''String Field''' def __init__(self, name): super().__init__(name, 'varchar(100)')# ------------------class IntegerField(Field): '''Integer Field''' def __init__(self, name): super().__init__(name, 'bigint')# ------------------class ModelMetaclass(type): '''meta class''' def __new__(cls, name, bases, attrs): if name == 'Model': return type.__new__(cls, name, bases, attrs) print('Found Model: %s' % name) 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): '''model''' def __init__(self, **kw): super().__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 = [] params = [] args = [] for k, v in self.__mappings__.items(): fields.append(v.name) params.append('?') args.append(getattr(self, k, None)) sql = 'insert into %s (%s) values (%s)' % ( self.__table__, ', '.join(fields), ', '.join(params)) print('sql: %s' % sql) print('args: %s' % str(args))# ------------------class User(Model): '''user''' id = IntegerField('id') name = StringField('name') email = StringField('email') password = StringField('password')# ------------------if __name__ == '__main__': USER = User(id=123, name='Michael', email='michael@gmail.com', password='my-pwd') USER.save()
输出结果
[Running] python "d:\git\pythonStudy\hello_world.py"Found Model: UserFound mapping: id ==> <IntegerField:id>Found mapping: name ==> <StringField:name>Found mapping: email ==> <StringField:email>Found mapping: password ==> <StringField:password>sql: insert into User (id, name, email, password) values (?, ?, ?, ?)args: [123, 'Michael', 'michael@gmail.com', 'my-pwd'][Done] exited with code=0 in 0.243 seconds
原文:廖雪峰的Python教程
阅读全文
2 0
- 使用元类编写一个简单的ORM框架
- 利用元类编写简单的ORM框架
- 编写一个ORM框架
- python 元类的使用(orm框架搭建)
- 一个简单的Android SQLite ORM框架
- 关于ORM框架的简单使用
- 使用python的twisted框架编写一个简单的聊天室
- 使用python的twisted框架编写一个简单的聊天室
- 一个使用面向对象方式编写的简单游戏框架
- 这是一个简单的ORM框架思路及雏形
- android 自做一个简单的ORM数据库框架
- ORM数据库简单的框架和黄油刀的使用
- android ORM数据库框架ActiveAndroid的简单使用
- Python编写ORM框架
- 编写ORM框架
- Django ORM框架的使用
- Orm框架之XUtils简单使用
- 简单 使用 的makefile编写 框架
- shell命令
- 关于eclipse的TestNG的插件安装方法
- 数据结构与算法分析(Java语言描述)(33)—— 散列表
- Linux安装jdk指南
- 一些重要的网站
- 使用元类编写一个简单的ORM框架
- 总结java从初级到中级最后到高级所要掌握的知识点
- loadrunner脚本编写(转载至虫师博客)
- iView导入Excel数据到数据库
- MYSQL动态给VIEW变量,创建动态VIEW
- win _TOMCAT集群配置
- 为什么你要建立SEO博客
- linux中tomcat的安装和部署
- Thumbnailator生成缩略图