引擎
myisam
innodb
blackhole
memory
ORM
优点:
让一个不懂数据库操作的小白也能够简单快速操作数据库实现相应功能
缺点:
sql 固定封转,不利于sql查询
对象关系映射
类 >>> 数据库的表
对象 >>> 表里一条条的记录
对象获取属性或方法 >>> 记录的字段对应的值
一张表有字段,字段里有字段名,字段类型,字段是否是主键,字段的默认值
class Filed(object):
pass
class StringFiled(object):
pass
class IntegerFiled(object):
pass
点属性 或看值
class Models(dict):
pass
def __getattr__(self,item):
return self.get(item)
def __setattr__(self,key,value):
return self[key] = value
查询
def select(self,**kwargs):
select * from db
select * from db where id = 1
保存
def save(self):
insert into db(name,password) values('qwe','123')
修改
def update(self):
update db set name = 'asd' where id = 3
hasattr
getattr
setattr
# 元类拦截类的创建过程 使它具备表的特性
class ModelsMetaClass(type):
def __new__(cls,class_name,class_bases,class_attrs):
# 只拦截模型表的创建表
if class_name = 'Models':
return type.__new__(cls,class_name,class_bases,class-attre)
table_name = class_attrs.get('table_name',class_name)
primary_key = None
mappings = {}
k ==>id ,name, v==>对应的值(对象)
for k,v in class_attrs.items():
用户表示表的字段
if isintance(v,Filed):
mapping[k] = v
是否有外键
if v.primary:
是
if primary_key:
raise TypeError('主键重复')
primary_key = v.name
多余的删除
for k in mappigs.keys():
class_attr.pop(k)
if not primary_key():
reise TypeError('必须要有一个主键')
class_attrs['table_name'] = table_name
class_attrs['primary_key'] = primary_key
class_attrs['mappings'] = mappings
return type.__new__(cls,class_name,class_bases,class_attrs)
pymysql模块连接数据库
单例版本
数据库连接池
优酷项目架构设计
注册登录
框架优化
cookie,session
校验登录(服务端必须校验,客户端无所谓)
服务端
1.要有固定的ip和port
2.24小时不间断提供服务
3.能够支持高并发