zoukankan      html  css  js  c++  java
  • 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
    
    
    
    
  • 相关阅读:
    Spring、Spring Boot 和 Spring Cloud 的关系
    Spring Boot 如何设置支持跨域请求?
    什么是嵌入式服务器?我们为什么要使用嵌入式服务器呢?
    nginx配置域名,不要端口
    域名解析以及nginx服务器设置
    为什么使用nginx
    RabbitMQ下载与安装(window版)
    spring的@ComponentScan注解
    spring的@EnableScheduling注解
    日志切割: logrotate、python、shell实现
  • 原文地址:https://www.cnblogs.com/hhh5460/p/6562659.html
Copyright © 2011-2022 走看看