2020/02/01 02-SQLAlchemy的CRUD

有了三种映射关系,就可以进行增删改查
在这里插入图片描述
add和add_all是用在session上的,需要使用sqlalchemy提供的session,利用这个会话对数据库进行操作
在这里插入图片描述

现在想要放到数据库里去,add()要的是实例
在这里插入图片描述
还有一种写法,一旦操作数据库就要判断有没有错误,没有错误就提交,有错误就打印 ,回滚
在这里插入图片描述
执行提交就有实际操作,就有sql语句在这里插入图片描述
但是commit还没记录
在这里插入图片描述
做了两次add都没报错
在这里插入图片描述
实际上这个提交这个数据,已经在数据库里存在了,sqlalchemy做了一些处理,判断数据库的状态,同样的数据放在数据库里了,所以没必要做同样的操作,如何发现的,就是看状态变化

执行一下
在这里插入图片描述
新增完了,update一下
在这里插入图片描述
加了这一句相当于insert之后,update了一下
在这里插入图片描述在这里插入图片描述
新增这个实例之后,进行修改,add_all会检测这个数据有没有差异,有差异就进行更新
在这里插入图片描述
**现在进行查询,get(2) 等于id=2,没有就是没有条件 *星号from **
在这里插入图片描述
参数化查询
在这里插入图片描述
student打印成这样是repr决定的
在这里插入图片描述
现在是用query方法对某个类进行查询,相当于对表查询,2代表主键=2即可,主键用get方法是最快的
在这里插入图片描述
现在student刚好对应id=2的那条记录,可以进行修改,修改只提供了一种方法,add(studnet),现在实例是student,刚才是s
在这里插入图片描述
要修改,要在某个实例上,确实发生过变化再加进来,commit才会有提交,没有变化,写了也是白写
在这里插入图片描述
增加是完全新建一个对象,add,commit就是新增
在这里插入图片描述
现在是从数据库找到一条对应的数据,现在是对student这样的数据进行修改,add就会发现现在是在有数据的对象上面进行修改,而且是跟数据库一一对应的,然后把数据进行修改,自动转换成update语句进行commit
在这里插入图片描述
先select再update,最后where 还是2,echo=true,就可以详细看到这些在做什么
在这里插入图片描述
这样就发生了改变
在这里插入图片描述
这就是如何简单查询和更新

先查到所有数据,全部删掉,删除最后也是要commit,固定下来的,现在这样是delet * from 表很危险
在这里插入图片描述在这里插入图片描述在这里插入图片描述
add_all()提交不成功,是因为s没有变化过,只要修改其中一条数据,就不一样了,就可以提交了
在这里插入图片描述
这里相当于只告诉了name,和age两个字段,所以print(s)id是空的
在这里插入图片描述
数据库会帮你自增主键ID,然后我们select,就 把id找回来了,将之前insert成功的id拿回来了,所以commit之后,print(s),就有id了在这里插入图片描述
这里add_all发现数据没有改变过,就没有提交,update语句出不来在这里插入图片描述在这里插入图片描述
简单查询得到的是一个可迭代对象
在这里插入图片描述
get语句可以通过主键查询
在这里插入图片描述
没写,代表 from,但是sql语句没执行*
在这里插入图片描述
把语句构造出来了,但是没查询
在这里插入图片描述
list,本来student返回的时候是一个可迭代对象,被迫迭代查询,在这里插入图片描述
最后可以用for循环迭代
在这里插入图片描述
get(2)就会查询,get是主键查询,返回的就是一个对象,没必要用容器再封一下在这里插入图片描述
这个是个集合,但是是懒的,你不动它,它就不查
在这里插入图片描述
一般我们是先查后改,大多数ORM工具都是先查后改,查完的结果,对这些实例一个个进行变化,变化完之后add,add之后commit

在这里插入图片描述
get完之后,对相应的数据进行修改,这样数有差异,add进来,commit就可以生成update语句。
必须先查后改,要更新,就add进来,commit即可

在这里插入图片描述
insert完了后面还有select语句,再次提交
在这里插入图片描述
但凡后面用,就再次提交
在这里插入图片描述
拿到第4条进行更新在这里插入图片描述
第4条年龄是50在这里插入图片描述
凡是更新,先查后盖,insert之后先select,再update
在这里插入图片描述
ORM框架一般都这么做,凡是更新,先查后改

在这里插入图片描述
在这里插入图片描述
删除指定对象做不到
在这里插入图片描述
在这里插入图片描述
rollback了,告诉你一个错误
在这里插入图片描述在这里插入图片描述
这个实例没有persisted持久化(ORM都不知道这条数据有没有持久化过,就没法删除),所以我们应该先查后删在这里插入图片描述
删除失败,是因为这个状态不是persisted
/在这里插入图片描述
这样就会直接查,然后再删除,select,修改,删除都要查数据库已经持久化的数据,insert不需要在这里插入图片描述
改成这样就可以删除
在这里插入图片描述在这里插入图片描述
先查后改,改完之后add,commit
delete是要把你的数据拿过来,挨个告诉session删除,先查后删,最后commit即可
query直接查的结果是迭代器本身,查询时候需要迭代,相当于逼它开始真正查询,拿回来的是一个容器,get方法一般返回一个对象,要么找到,要么没找到,底层用的还是pymysql

这种情况下应该少访问数据库,一般创建一个容器,就反复用这个容器,在内存里折腾。不要问数据库要了,写代码的时候应该先把echo打开,,了解特性之后,真正运行的时候,再把echo=flase,默认false
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值