python一个精简的ORM框架(廖老师的python教程)理解
来源:互联网 发布:网络诈骗的危害性 编辑:程序博客网 时间:2024/06/05 20:53
虽说廖老师python教程的实战已经过了一遍(除了部署以及编写移动App),但还是很多内容不理解,尤其是ORM框架。不过最近理解了使用元类里面一个精简的ORM框架,所以分享一下理解。
精简的ORM框架在这里,元类的介绍在这里。
分析源码
class User(Model): id = IntegerField('id') name = StringField('username') email = StringField('email') password = StringField('password')u = User(id=12345, name='eyewater', email='test@orm.org', password='password')u.save()
从User类的编写以及实例u的创建可以得到下面的信息
类属性分别为id,name,email,password
类属性对应的属性类型为
IntegerField,StringField,StringField,StringField
类属性对应的属性值为
12345,eyewater,test@orm.org,password
User类继承于Model类
class User(Model)
Model类的父类也是Model即为其本身(类的构造器)
def __init__(self, **kw): super(Model, self).init__(**kw)
再来看ModelMetaclass
def __new__(cls, name, bases, attrs): if name=='Model': return type.__new__(cls, name, bases, attrs)
cls表示当前准备创建的类的对象即User类
name表示类名即User
bases表示类继承的父类集合
attrs代表类的属性集合即User类的属性集合id,name,email,password
for k, v in attrs.items(): if isinstance(v, Field): print('Found mapping: %s ==> %s' % (k, v)) mappings[k] = v
k的值为id,name,email,password
v的值为IntegerField,StringField,StringField,StringField
所以看的输出就像这样:
Found mapping: email ==> <StringField:email>Found mapping: password ==> <StringField:password>Found mapping: id ==> <IntegerField:uid>Found mapping: name ==> <StringField:username>
for k in mappings.keys(): attrs.pop(k)
删除属性,用属性__mappings__
来保存属性和列的映射
attrs['__table__'] = name
用属性__table__
来保存表名
回到Model类
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))
getattr来获取属性值即12345,Michael,test@orm.org,my-pwd
所以输出看起来就像下面这样:
SQL: insert into User (id,username,email,password) values (?,?,?,?)ARGS: [12345, 'eyewater', 'test@orm.org', 'password']
阅读全文
0 0
- python一个精简的ORM框架(廖老师的python教程)理解
- 廖老师python教程实战Day3-编写ORM理解
- 廖老师python教程实战Day5-编写web框架理解
- Python的ORM框架SQLAlchemy
- Python的ORM框架-SQLAlchemy
- Python的数据库ORM框架:SQLAlchemy
- Python的数据库ORM框架:SQLAlchemy
- Python的ORM框架SQLAlchemy入门教程
- Python的数据库ORM框架:SQLAlchemy
- 推荐python的ORM框架peewee(转)
- Python的数据库ORM框架:SQLAlchemy
- python 元类的使用(orm框架搭建)
- Python下ORM的一个设计举例
- Python下ORM的一个设计举例
- Python下ORM的一个设计举例
- python sqlalchemy orm框架使用教程
- 用Selenium登录到廖老师的python教程
- python orm框架sqlalchemy执行更新、删除时遇到的一个bug
- 真实经历“grub2安装错误”
- Python3.6.3 程序.exe格式打包发布
- 使用HttpServletResponse提供文件下载
- PHP目前比较常见的五大运行模式
- Java开发微信公众号
- python一个精简的ORM框架(廖老师的python教程)理解
- 23种设计模式之-----适配器模式(Adapter Pattern)
- JavaWeb基础--HttpServletRequest
- WINDOWS下django入门
- 1、jmeter配置(Error: Unable to access jarfile ApacheJMeter.jar)
- Spring学习(6)--Spring中bean的生命周期
- JavaWeb基础--ContentType
- 软件测试的定义
- Eclipse利用Maven的插件部署web项目到远程tomcat服务器