SQLAlchemy 关联表删除实验

简介: 本实验所用代码来源于官网文档from sqlalchemy import Table, Column, Integer, String, ForeignKeyfrom sqlalchemy.orm import relationship, backreffrom 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

目录
相关文章
|
7月前
|
应用服务中间件 数据库 AHAS
gorm 一对一关系 以及 关联的操作
gorm 一对一关系 以及 关联的操作
186 0
|
6月前
|
存储 关系型数据库 MySQL
MySQL数据库——约束(概述、约束演示、外键约束、删除/更新行为)
MySQL数据库——约束(概述、约束演示、外键约束、删除/更新行为)
83 0
|
7月前
|
SQL 数据库
SQL标识列实现自动编号的步骤和技巧以及优势
SQL标识列实现自动编号的步骤和技巧以及优势
151 0
|
关系型数据库 MySQL 数据库
SQLAlchemy关联表一对多关系的详解
SQLAlchemy关联表一对多关系的详解
|
关系型数据库 MySQL 数据库连接
SQLAlchemy关联表删除策略设置
SQLAlchemy关联表删除策略设置
|
SQL 数据库 索引
【Django学习】(六)ORM框架_关联模型_数据创建&查询&更新&删除&过滤
【Django学习】(六)ORM框架_关联模型_数据创建&查询&更新&删除&过滤
【Django学习】(六)ORM框架_关联模型_数据创建&查询&更新&删除&过滤
|
数据库 数据安全/隐私保护 索引
Gorm学习(五)进阶:多态关联、关联标签以及事务
出现需要外键引用多个表的情况,不可能删除原来表结构,重新添加一个外键ID再建表,所以我们可以建立一个交叉表。让Addres不再依赖于User表或者Order表。
837 1
Gorm学习(五)进阶:多态关联、关联标签以及事务
|
SQL 关系型数据库 MySQL
mysql实战:左表数据全部展示,关联表有关联数据返回1,没有关联数据返回0
现在有一消息通知功能,后台发布的每条通知消息都会展示到APP端消息列表中,每条消息支持是否已读操作,从消息列表中点击进入详情视为完成已读操作;现在需要在查询出的用户消息列表信息,其中所有的通知消息信息要标注出是否已读.
mysql实战:左表数据全部展示,关联表有关联数据返回1,没有关联数据返回0
|
SQL 物联网 Shell
SQLite 虚拟表和触发器操作联结表 | 学习笔记
快速学习 SQLite 虚拟表和触发器操作联结表