当前位置: 首页 > 工具软件 > Relationship > 使用案例 >

flask 中ORM层面relationship的用法

松刚豪
2023-12-01

ORM层面的relationship方法中cascade:

 在SQLAlchemy,只要将一个数据添加到session中,和他相关联的数据都可以一起存入到数据库中了。

这些是怎么设置的呢?其实是通过relationship的时候,有一个关键字参数cascade可以设置这些属性,

cascade属性值为:

save-update:默认选项。在添加一条数据的时候,会把其他和他相关联的数据都添加到数据库中。这种行为就是save-update属性影响的。

delete:表示当删除某一个模型中的数据的时候,是否也删掉使用relationship和他关联的数据。

delete-orphan:表示当对一个ORM对象解除了父表中的关联对象的时候,自己便会被删除掉。当然如果父表中的数据被删除,自己也会被删除。这个选项只能用在一对多上,并且还需要在子模型中的relationship中,增加一个single_parent=True的参数。

merge:默认选项。当在使用session.merge,合并一个对象的时候,会将使用了relationship相关联的对象也进行merge操作。

expunge:移除操作的时候,会将相关联的对象也进行移除。这个操作只是从session中移除,并不会真正的从数据库中删除。

all:是对save-update, merge, refresh-expire, expunge, delete几种的缩写

class User(Base):
    __tablename__ = 'user'
    id = Column(Integer,primary_key=True,autoincrement=True)
    uname = Column(String(50),nullable=False)

    # articles =relationship("Article",cascade="save-update,delete") #放入Article中去优化
    # comments = relationship("Comment") #放入Comment中去优化

class Article(Base):
    __tablename__ = 'article'
    id = Column(Integer, primary_key=True, autoincrement=True)
    title = Column(String(50), nullable=False)
    uid = Column(Integer,ForeignKey("user.id"),nullable=False)

    # author = relationship("User",backref="articles") #cascade默认为save-update
    # author = relationship("User",backref="articles",cascade="save-update") #明文指定为save-update
    #delete:表示当删除某一个模型中的数据的时候,是否也删掉使用relationship和他关联的数据。默认不删除关联数据
    # author = relationship("User",cascade="save-update,delete") #明文指定为save-update 和delete
    #优化写法
    author = relationship("User",backref=backref("articles",cascade="save-update,delete"),cascade="save-update,delete")
    # author = relationship("User",backref=backref("articles",cascade="save-update,delete"),cascade="all")

 类似资料: