一:什么是数据模型?
- 数据模型就是在程序中的自定义类型,主要目的是封装数据,封装自定义的数据,作为对象进行操作【封装】
- 面向对象的封装零散的数据封装 ,封装属性/方法,最终以对象的形式呈现数据
- 数据模型——>面向对象设计的class类型,就是面向对象中的类型,通过类型来表示一种模型【实体存在的物体——实体类】的过程。
二:ORM操作
1.ORM的理解?
- ORM(Object Relational Mapping)对象关系映射,是一种为了解决面向对象与关系数据库存在的互不匹配的现象的技术——>程序中的对象object和数据库中的表(关系relation)之间的对应(mapping映射)关系,对于这样的关系操作管理过程就是orm!
- ORM的核心步骤
- ORM的操作核心:数据对象的增删改查
- ORM操作第一条:增删改
增删改:都是直接操作数据库中数据记录的变动的
——>涉及到数据的增删改,数据的变动,故要接受事务管理 【commit()和rollback()】
- ORM操作的第二条:查询
查询:永远不变的核心,查询操作比增删改更加复杂的一种操作形式,ORM框架中一般都会将查询封装为单独的一部分进行处理!
3.ORM和tornado的关系
- tornado曾经支持简单的ORM操作,通过自定义的SQL语句的方式,来完成数据对象的拆分之后进行的增删改查操作【并不是面向对象的】。后来因为torndb作为一个独立的模块进行处理,tornado不在有内置的ORM支持!
- tornado在实际使用的时候人们都认为它并没有支持内置的ORM操作,需要和第三方模块结合起来完成数据模型对象的ORM操作【ps:这样的操作方式一般都是直接操作SQL语句】
比较常用的操作:使用pymysql/tornado/sqlalchemy
4.sqlalchemy操作
- windows环境下安装
pip install sqlalchemy
or
easy_install sqlalchemy
- 检测是否安装成功
python环境下
>>import sqlalchemy
>>sqlalchemy.__version__
>>1.2.0b3
安装成功了
- sqlalchemy的使用
——>ORM操作的核心,就是将程序中的对象要在数据库中进行增删改查操作
- 1.连接指定的数据库
建立指定数据库的连接引擎
from sqlalchemy import create_engine#引入引擎对象的模块
from sqlalchemy.orm import sessionmaker#创建和数据库连接会话模块
engine = create_engine('.....')#创建引擎对象
Session = sessionmaker(bind=engine)#创建会话类型
session = Session()#获取一个会话连接
ps:如果创建会话的时候还没有创建引擎对象
Session = sessionmake()#创建一个会话类型
Session.configur(bind=engine)#将一个连接引擎注册给这个会话
session = Session()#得到具体的包含连接引擎会话
ps注意:sqlalchemy默认底层使用mysqldb完成和数据库的连接但是mysqldb不支持最新的版本的python和mysql数据库的连接,一般使用pymysql进行替代。
- 2.数据模型创建对象——>sqlalchemy内建了一部分字段属性的函数和构建一个基础类的函数,可以自定义类型直接定义属性eg:Column用来定义属性,String/Integer/Float等等用来定义属性的类型。
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,String,Integer
Base = declarative_base()
sqlalchemy不会自动关联数据模型和数据库中表的关系,需要在代码中直接指定当前类型和哪个数据库之间有关系通过tablename指定
class Person(Base):
__tablename__ ='persons'#指定关联的表
- 3创建一个指定的数据对象
和常规对象的创建方式一致,通过关键字参数直接给属性赋值- 此时创建的对象只是存在内存中的对象-没有id编号-暂时不受sqlalchemy的管理—临时对象
person = Person(name='tom',age=12)
- 同步对象数据到数据库,此时的同步,在数据库中并没有数据,而是临时存储在会话中的一个对象-—缓存对象
session.add(person)
- 通过事务提交的方式,将缓存对象可以存储到数据库中,此时对象为—持久对象
session.commit()
小结:对象的三种状态:
1.临时状态:临时对象,程序中直接创建的对象
2.缓存状态:通过调用会话add()
函数将一个对象添加到会话缓存中,此时对象接受会话管理,但是数据库中并没有数据
3.持久状态:通过调用会话的commit()/flush()
等各种提交/刷新的操作,将数据存到数据库中,此时程序中的这个对象就是持久对象