ORM之youku项目小练习(上)
Posted jhpy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ORM之youku项目小练习(上)相关的知识,希望对你有一定的参考价值。
1什么是ORM问题解决缺点ORM对象关系映射关系映射关系分析步骤首先它围绕着这MySQL做的问题1 表内是有字段类型的问题2,如果多一点的类型怎么办?问题3.假设100张表就需要写100个__init__问题4:每张表的字段名与字段数量不同,导致没法直接继承Models父类问题4 字典的取/存值方式有限,希望改为 对象.属性取值, 对象.属性=值 存值的方式。代码实现问题5
什么是ORM
问题
如果我们具体操作数据库的时候,是不是很麻烦,每次都要和复杂的SQL语句打交道?
解决
Object-Relationl Mapping,作用就是关系型数据库和对象之间的一个映射,
这样子我们只需要像平时操作对象一样操作它就可以了.极大的增大了开发效率
缺点
sql封装固定,不利于SQL查询优化
具体的东西就不一一展示了,具体请看我转发的一篇
ORM对象关系映射
关系映射
‘‘‘mysql: python:
表名 ----> 类名
一条记录 ---> 对象
字段 ---> 对象.属性‘‘‘
关系分析
上面关系分析:
通过python中创建类来实现对数据库一张表结构的关系产生一种一一对应关系
通过python中对创建的类实例化的对象操作对数据库一张表进行表记录的操作的一一对应关系
通过python中对象点属性的方式来操作记录表中某一字段的对应值,的一一对应操作关系
步骤
首先它围绕着这MySQL做的
创建一张User表,表内含有字段(id,name,pwd),
class User:
def __init__(self,id,name,pwd):
self.id=id
self.name=name
self.pwd=pwd
问题1 表内是有字段类型的
但是我们的表内是有字段类型的,所以应该先写字段类型类,仿优酷系统只需要两种类,一种是int,另一种是varchar
写字段类型类
字段名
字段类型(长度)
-varchar(64)
int
是否为主键
默认值
先写int类
#需要先给字段3个默认值column_type,primary_key,default
class IntegerField:
def __init__(self,name,column_type=‘int‘,primary_key=False,default=None):
self.name=name
self.column_type=column_type
self.primary_key=primary_key
self.default=default
写完int.类再写string varchar()类 是不是觉得有点复杂了,
问题2,如果多一点的类型怎么办?
解决:
继承一个Models父类.
#父类
class Field:
def __init__(self,name,column_type,primary_key,default):
self.name=name
self.column_type=column_type
self.primary_key=primary_key
self.default=default
#两个字段类型类
#整型
class IntegerField:
def __init__(self,name,column_type=‘int‘,primary_key=False,default=None):
super().__init__(name,column_type,primary_key,default)
#字符串
class StringField:
def __init__(self,name,column_type=‘varchar(64)‘,primary_key=False,default=None):
super().__init__(name,column_type,primary_key,default)
仿优酷可以干些什么?
看电影,那么有个电影表类,还有公告表....
‘‘‘写表类
User:
user_name
pwd
Movie:
movie_name
movie_size
Notice:
title
content‘‘‘
问题3.假设100张表就需要写100个__init__
解决那么我们就写在一个父类里面 继承一个Models父类
但是又有问题了,即使我们想写父类也有限制,问题如下:
问题4:每张表的字段名与字段数量不同,导致没法直接继承Models父类
解决:
dict是对象,继承dict,触发字典内部的__init__(因为它具备可接受任意数量以及任意类型属性的特性),
验证:
原理解析:
dict是对象,(Python中一切皆为对象) 可以用来传任意关键字参数**kwargs ,形参中的**会将溢出的关键字实参全部接收,然后存储字典的形式,然后把字典赋值给**。key:value形式,可 自行查看源码
解决问题的方法总比 问题多,,
问题4 字典的取/存值方式有限,希望改为 对象.属性取值, 对象.属性=值 存值的方式。
以上是关于ORM之youku项目小练习(上)的主要内容,如果未能解决你的问题,请参考以下文章