数据库中事务操作(SQLAlchemy)

可使用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()
        session.commit()
    except:
        session.rollback()
        raise
    finally:
        session.close()

我们使用contextlib的contextmanager函数作为装饰器,来创建一个上下文管理器。让我们尝试着用它来创建一个上下文管理器,用于打开和关闭文件。

query2.order_by(User.name.desc()).all()
query2.filter(User.id == 1).scalar() # 如果有记录,返回第一条记录的第一个元素
query2.limit(1).all() # 最多返回 1 条记录
query2.offset(1).all() # 从第 2 条记录开始返回
session.query(func.now()).scalar() # func 后可以跟任意函数名,只要该数据库支持
session.flush() # 写数据库,但并不提交
使用 session.merge() 方法替代 session.add(),

猜你喜欢

转载自blog.csdn.net/nicezheng_1995/article/details/82466033