2020/02/01 03-实例的State

在这里插入图片描述
链接所有数据库都有个链接,链接在sqlalchemy里封装成了一个引擎,需要创建引擎,引擎内部有个链接池,内部集成了对不同数据库的支持,有一个方言的东西,会调用对应数据库的DBAPI

ORM,要求,必须把映射建立好,在新的sqlalchemy提供的编程接口中,尽量让创建mapper的时候使用基类,利用这个基类来创建子类,子类用到了基类的特性,使用元编程来实现的,走这个元类来做了一些改变

sqlalchemy本来就是个ORM框架,还用到了描述器

用了ORM,mapper之后就要对数据库建立链接,需要依靠另外一个实例,session实例,session方法是用sessionmaker得到一个session类;
session要链接数据库,必须绑定一个引擎

session直接调用,query,add,最后commit,会话线程不安全,并行起来,session就会出现问题

CRUD,比较简单,增,就需要先创建一个对象,add,之后commit,
修改,先查后改,查到数据已经在数据库里已经有,再add之后,commit
删除,也是先查后删除

删除之后,会有个问题,会持久化,持久化就是当前对象实例的状态,是持久化状态

在这里插入图片描述

状态

在这里插入图片描述
在这里插入图片描述
每一个实例都有一个状态属性,_一个下划线代表是一个保护属性
inspect给了一个对象

在这里插入图片描述
使用repr也这样,代表没有好的表达方式在这里插入图片描述
这个语法是再3.6才支持的,定义一个变量,是这个类型在这里插入图片描述
persistent持久=True在这里插入图片描述在这里插入图片描述
transient是临时的,也不知道以后要不要持久化,所以是临时的在这里插入图片描述
在这里插入图片描述
写一个函数,pending就是预备着的,可能要做一些操作的,persistent真正写到数据库里
在这里插入图片描述
session_id=没有,attached附加没有,pending没有,transistent临时的,还没有和数据库发生关系,detached分离
在这里插入图片描述
这里是mapp
在这里插入图片描述
下面是session状态,现在是准备新增
在这里插入图片描述
查看状态变化
add之后i,attached是附加的了,pending预备状态=true,就差commit了,当前session中的id=1
在这里插入图片描述
修改数据,查看1,2,34,的变化
在这里插入图片描述
提交成功后,就persistent持久化=true在这里插入图片描述
先注释掉
在这里插入图片描述
在这里插入图片描述
会话建立就需要干活了,所以有个会话ID
在这里插入图片描述
后面几个状态很有用,
persistent=true说明在数据库里有对应的数据
第一步先transistent,然后只要add加入之后,就变成pending,commit之后,成功的话就是persistent

在这里插入图片描述
现在修改下name,然后commit,再看下5,6,7状态
在这里插入图片描述
现在操作的是已经在数据库已经持久的记录,presistent=true,怎么修改都是持久的在这里插入图片描述
删除了然后getstate看下状态,需要调用一次flush,不然状态无法改变

在这里插入图片描述在这里插入图片描述
调用删除,需要flush一下,在没有commit之前,这时候的状态是deleted,事务提交了就是detached
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
查看这几步的变化
在这里插入图片描述
一调用flush,delete开始执行,在这里插入图片描述
事务一旦提交就是detached分离的了
在这里插入图片描述
常见的状态有5个,transient,pending,persistent,deleted,detached
在这里插入图片描述
类产生的实例还没有add到session当中去,也就是s=students(),跟谁都没关联,只是创建了一个普通的对象
在这里插入图片描述
在这里插入图片描述
把实例,在session add之后,就是pending状态,但是还没有真正写入数据库,一旦commit,变成persistent
在这里插入图片描述
修改和删除,都需要拿到这些对象,这些状态对象都必须是persistent=true,所以要先查后改,所以首先有个persistent实例,否则不能进行操作。
真要用delete语句,首先需要get,拿到一个persistent实例,然后对这个实例进行删除,看状态必须flush一下,flush之后,变成deleted,做数不作数还需要看commit,就从原来持久化的变成了真删除

在这里插入图片描述
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述
看一下persistent指的是什么意思
property装饰器,是一个属性

在这里插入图片描述
首先需要有ke’y,且不是none,查询完户分配一个key值
attached要把数据加进来,不能是deleted

在这里插入图片描述在这里插入图片描述
把key一加,就可以知道状态是如何切换的
在这里插入图片描述
通过这样的方式可以看到实例究竟如何跟数据库关联起来,以及是怎么转变状态的,和数据库里的对应关系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值