仿优酷项目小疑问点

  • 为什么要用类绑定方法: 就相当于类的一个方法,所以不需要类实例化产生对象(查询功能不需要__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语句,然后拆分)

原文地址:https://www.cnblogs.com/michealjy/p/11644092.html