• SQLAlchemy 关联表删除实验


    本实验所用代码来源于官网文档

    from sqlalchemy import Table, Column, Integer, String, ForeignKey
    from sqlalchemy.orm import relationship, backref
    from sqlalchemy.ext.declarative import declarative_base
    
    Base = declarative_base()
    
    '''关联表删除实验'''
    
    
    class User(Base):
        __tablename__ = 'users'
    
        id = Column(Integer, primary_key=True)
        name = Column(String)
        password = Column(String)
    
        addresses = relationship("Address", 
                                back_populates='user', 
                                cascade="all, delete, delete-orphan")
    
        def __repr__(self):
           return "<User(name='%s', fullname='%s', password='%s')>" % ( self.name, self.fullname, self.password)
    
    
    class Address(Base):
        __tablename__ = 'addresses'
        id = Column(Integer, primary_key=True)
        email_address = Column(String, nullable=False)
        user_id = Column(Integer, ForeignKey('users.id'))
        
        user = relationship("User", 
                            back_populates="addresses")
    
        def __repr__(self):
            return "<Address(email_address='%s')>" % self.email_address
    
    
    from sqlalchemy import create_engine
    from sqlalchemy.orm import sessionmaker
    
    
    DB_CONNECT_STRING = 'sqlite://' # 'sqlite:///:memory:'
    engine = create_engine(DB_CONNECT_STRING, echo=False)
    DB_Session = sessionmaker(bind=engine)
    session = DB_Session()
    
    # 1. 创建表
    Base.metadata.create_all(engine)
    
    # 2. 插入数据
    some_users = [User(id=1, name='张三', password='111111'),
                  User(id=2, name='李四', password='222222'),
                  User(id=3, name='王五', password='333333'),
                  User(id=4, name='赵六', password='444444')]
    session.add_all(some_users)
    
    some_addresses = [Address(id=1, email_address='zhang@163.com', user_id=1),
                      Address(id=2, email_address='zhang@qq.com', user_id=1),
                      Address(id=3, email_address='li@163.com', user_id=2),
                      Address(id=4, email_address='wang@163.com', user_id=3),
                      Address(id=5, email_address='zhao@163.com', user_id=4)]
    session.add_all(some_addresses)
    
    session.commit()
    
    #关联表删除实验
    zhangsan = session.query(User).get(1)
    
    # 删除!!
    del zhangsan.addresses[1]
    
    res = session.query(Address).filter(Address.email_address.in_(['zhang@163.com', 'zhang@qq.com'])).count()
    print(res) # 结果为 1
    
    # 删除!!
    session.delete(zhangsan)
    
    res = session.query(User).filter_by(name='张三').count()
    print(res) # 结果为 0
    
    res = session.query(Address).filter(Address.email_address.in_(['zhang@163.com', 'jzhang@qq.com'])).count()
    print(res) # 结果为 0
    
    
    
    
  • 相关阅读:
    Oracle--pl/sql编程-分支语句(判断、循环)
    axios二次封装及API接口统一管理
    Vuejs之axios获取Http响应头
    对webpack和gulp的理解和区别
    nodejs+redis使用
    Linux安装Nginx、Redis、django
    js 原型里面写方法
    在layui中使用 jquery 触发select 的 change事件无效
    promise看这篇就够了
    vue 封装原型方法 加 promist .then
  • 原文地址:https://www.cnblogs.com/hhh5460/p/6562659.html
Copyright © 2020-2023  润新知