-
为什么要用类绑定方法: 就相当于类的一个方法,所以不需要类实例化产生对象(查询功能不需要__init__, 但是插入和更新都需要对表进行更新)
-
查询、插入和更新:先写出原生sql,然后再根据需要传的参数,再在上面写
-
sql语句中,当需要输入字符串(带引号的数据)时,需要考虑sql注入问题,例如:select * from user where name=‘mike’ ——— sql = ‘select * from %s where %s=?‘ %(table_name, key) (空一行) sql=sql.replace(‘?’, ‘%s’) 就避免了这个问题,自己拼接一定有sql注入问题,但是用占位符填充后,交给pymysql处理,就不会有这个问题了
-
为什么需要反射取值,因为循环拿到的v是字段类型对象,只是点出来,得到的不是值,加v.default,是因为如果有值就取值,如果没有就取默认值
-
execute中传入的args值可以是元组,列表或者字典
-
装饰器为什么用@wraps
问题:我用obj = User(student_name=‘tank’)实例化一个User对象,但是obj.student_id得到的None
解答:出发点就是错的,首先应该是通过查询得到一个元素为对象的列表,然后再取第一个值,这样得到的就是一个对象,这个时候在进行.取值就是正确的了
ORM思路:
字段类型(字段名,字段类型,是否主键,默认值)
整数+字符串,
元类:控制表类(表名,唯一主键和字段名称空间)
表父类:继承字典类和元类
首先重写字典类,点取值和点赋值,然后绑定方法有select, save,sql_update(注意先写出原生sql语句,然后拆分)