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
本文转自罗兵博客园博客,原文链接:http://www.cnblogs.com/hhh5460/p/6562659.html ,如需转载请自行联系原作者
相关文章
|
4月前
|
SQL 存储 安全
SQL视图实验:创建、查询与管理技巧
在数据库管理系统中,视图(View)是一个虚拟表,其内容由查询定义
|
6月前
|
存储 关系型数据库 MySQL
MySQL数据库——约束(概述、约束演示、外键约束、删除/更新行为)
MySQL数据库——约束(概述、约束演示、外键约束、删除/更新行为)
85 0
|
7月前
|
SQL 数据库
SQL标识列实现自动编号的步骤和技巧以及优势
SQL标识列实现自动编号的步骤和技巧以及优势
151 0
|
关系型数据库 MySQL 数据库
SQLAlchemy关联表一对多关系的详解
SQLAlchemy关联表一对多关系的详解
|
关系型数据库 MySQL 数据库连接
SQLAlchemy关联表删除策略设置
SQLAlchemy关联表删除策略设置
|
关系型数据库 MySQL
Mysql中通过关联update将一张表的一个字段更新到另外一张表中
Mysql中通过关联update将一张表的一个字段更新到另外一张表中
1127 0
|
SQL 关系型数据库 MySQL
mysql实战:左表数据全部展示,关联表有关联数据返回1,没有关联数据返回0
现在有一消息通知功能,后台发布的每条通知消息都会展示到APP端消息列表中,每条消息支持是否已读操作,从消息列表中点击进入详情视为完成已读操作;现在需要在查询出的用户消息列表信息,其中所有的通知消息信息要标注出是否已读.
mysql实战:左表数据全部展示,关联表有关联数据返回1,没有关联数据返回0
|
存储 SQL 关系型数据库
MySQL数据库的创建(表的创建,列,表的增删改,深入浅出)
存储数据是处理数据的第一步 。只有正确地把数据存储起来,我们才能进行有效的处理和分析。否则,只能是一团乱麻,无从下手。那么,怎样才能把用户各种经营相关的、纷繁复杂的数据,有序、高效地存储起来呢? 在 MySQL 中,一个完整的数据存储过程总共有 4 步,分别是创建数据库、确认字段、创建数据表、插入数据。
MySQL数据库的创建(表的创建,列,表的增删改,深入浅出)
|
SQL 物联网 Shell
SQLite 虚拟表和触发器操作联结表 | 学习笔记
快速学习 SQLite 虚拟表和触发器操作联结表