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")
。