1.我们首先看 u = User()这是一个实例化的过程:于是系统需要创建这个叫
User 的类,它继承自Model,model由ModegMateclass 指导,User
也被指导形成该类,现在看user这个类形成的具体细节__new__:<1>.打印Found model: User
<2>建立Mapping<3>遍历这个类的方法集.发现有四个attr.item(),分别为email ==> StringField:email
,password ==> StringField:password,id ==> IntegerField:uid,
name ==> StringField:username。期间实例话的调用了StringField和interfield及父类
Field类 ,因为name = StringField(‘pusername’)本身就是实例化过程。将这四个属性添加
到mappings中,后将四个属性id-name-emali-password弹栈,并将建立一个新的字典
{‘mappings’:{‘email ‘:‘StringField:pemail’,‘passwd’ :‘StringField:password’.
‘ppd’’:’ IntegerField:uid’,‘name’ :’ StringField:pusername’},‘table’:‘User’}
上面就是User内部有的新内容。然后return 就指导User建立了类。
2.再看参数u = User(id=12345, name=‘Michael’, email=‘test@orm.org’, password=‘my-pwd’)
User继承自Model于是便有Model的__init__方法,调用它将各个值传入,然后调用__setattr__方法
形成一个字典
3.u.save.便使用了Model的save方法:查看k, v in self.mappings.items():
k = id; v.name=pid v = IntegerField:pid
在field集合内加入了v.name[‘pid’,‘pusername’,‘pemail’,‘passwd’]
在args集合内加入了self[k]:[12345,‘Michael’,‘test@orm.org’,‘my-pwd’]
sql语句:
SQL: insert into User (pid,pusername,pemail,passwd) values (?,?,?,?)
打印args;
ARGS: [12345, ‘Michael’, ‘test@orm.org’, ‘my-pwd’]