104.SQLAlchemy级联数据操作参数

from sqlalchemy import Column, Integer, String, ForeignKey
from sqlalchemy import Table
from sqlalchemy.orm import relationship, backref

from util_db import Base, Session

class User(Base):
    __tablename__ = "t_user"
    id = Column(Integer, primary_key=True, autoincrement = True)
    name = Column(String(32))
    '''
    # 测试1:测试1:relationship中默认cascade = save-updata,若主表中添加数据,子表同样也添加
    articles = relationship('Article', backref = 'user')
    '''
    '''
    # 测试2:置空relationship主表中的cascade
    # 发现无法做到级联操作,添加谁,谁进入数据库中
    # articles = relationship('Article', backref = 'user',cascade = '')
    '''

    '''
    # 测试3:设置cascade = 'save-update'
    # 若不在relationship中填cascade,默认值为save-update
    articles = relationship('Article', backref = 'user', cascade = 'save-update')
    '''
    '''
    # 测试5:设置cascade = 'delete,save-update'查看delete的效果
    # 发现此时,主表增加数据时候,子表同时增加,删除数据时候不会再和测试4一样制空,会直接删除
    articles = relationship('Article', backref = 'user', cascade = 'save-update,delete')
    '''
    '''
    # 测试6:设置cascade='delete-orphan'(设置此参数时候,必须要加single_parent=True和delete)
    # 若把主表与子表的关系断开时候,就会把子表的数据给置空
    # 断开的方法就是把他们关联对象articles给清除即可
    articles = relationship("Article", backref = 'user', cascade= 'save-update,delete,delete-orphan',single_parent=True)
    '''
class Article(Base):
    __tablename__ = "t_article"
    id = Column(Integer, primary_key = True, autoincrement = True)
    title = Column(String(32))
    uid = Column(Integer, ForeignKey("t_user.id"))
    '''
    # 测试1:relationship中默认cascade = save-updata,若主表中添加数据,子表同样也添加
    # user = relationship('User', backref = 'articles')
    '''

    '''
    # 测试2:置空relationship子表中的cascade
    # 两个表都无法添加进去
    # user = relationship("User", backref = 'articles', cascade = '')
    '''
    # 测试7:把relationship换一个类去作用
    # 结果,cascade作用在Atr就对art起作用,
    # 例如,这个cascade作用是同时删同时更新,说明针对art删除数据,user就被删,反过来操作不会被删除
    user = relationship('User', backref = 'articles', cascade = 'save-update,delete')



def create_data():
    Base.metadata.drop_all()
    Base.metadata.create_all()
    user = User(name = "SXT")
    art1 = Article(title = "Python", uid=1)
    art2 = Article(title = "MySql", uid = 1)
    user.articles.append(art1)
    user.articles.append(art2)

    with Session() as ses:
        ses.add(user)
        ses.commit()

'''
测试4:在cascade='save-update'时候,删除主表数据,
相关联的子表数据只会为空不会删除
'''
def delte_art():
    with Session() as ses:
        user = ses.query(User).first()
        ses.delete(user)
        ses.commit()

def delte_art():
    with Session() as ses:
        art = ses.query(Article).first()
        ses.delete(art)
        ses.commit()
def updata_data():
    with Session() as ses:
        user = ses.query(User).first()
        user.articles = []
        ses.commit()

if __name__ == "__main__":
    # create_data()
    # delte_data()
    # updata_data()
    delte_art()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想成为数据分析师的开发工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值