数据库中事务操作(SQLAlchemy)

这篇博客探讨了在数据库操作中如何使用SQLAlchemy进行事务处理,特别是`db.relationship()`函数在建立模型间一对多关系的应用。文章详细介绍了`db.relationship()`的参数如`backref`、`primaryjoin`、`lazy`等,并提到了子查询的概念。同时,还讨论了`session.merge()`和`Session.update()`在数据更新中的不同作用。最后,展示了如何在Python中使用`contextlib`进行数据库事务的开启和关闭。
摘要由CSDN通过智能技术生成

可使用db.relationship()把数据库的不同行联系起来,建立一对多的关系,db.relationship()的第一个
参数表明关系的另一端是哪个模型,其他可选参数如下:
backref 在关系的另一个模型中添加反向引用
primaryjoin 明确两个模型之间使用的联结条件
lazy 指定如何加载相关记录,
可选值有select(首次访问时加载)、immediate(源对象加载后加载)、joined(加载记录,但使用联结)、subquery(立即加载,但使用子查询),noload(永不加载)、 dynamic(不加载记录,但提供加载记录的查询)
当一个查询是另一个查询的条件时,称之为子查询。
uselist 如果设为False,不适用列表而使用标量
order_by 指定关系中记录的排序方式
secondary 指定多对多关系中关系表的名字
secondaryjoin 指定多对多关系中的二级联结条件
session.merge()修改表中记录,其所需要的实体状态为脱管状态,实体状态没有持久化,但是数据库中的记录更新了。
Session.update()实体变成了持久化状态。数据持久化就是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称
db.py对数据库中事务的管理
开启和关闭:

def create_session():
    """
    Contextmanager that will create and teardown a session.
    """
    session = settings.Session()
    try:
        yield session
        session.expunge_all()
        ses
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值