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
SQLAlchemy 关联表删除实验的更多相关文章
- sqlalchemy ————关联表
1.创建模型的时候做外键关联 class UI_ID(db.Model): __tablename__ = 'ui_id' id = db.Column(INTEGER(11), primary_ke ...
- SQLServer表内自关联级联删除
今天处理SQLServer级联删除遇到了很蛋疼的事. SQLServer 不支持表内自关联级联删除,而MySql和Oracle却支持. 貌似原因是SQLServer 会产生循环级联,就不给这样弄.所以 ...
- 数据库多对多关联表(Python&MySQL)
Python Python对MySQL数据库操作使用的是sqlalchemy这个ORM框架 #一本书可以有多个作者,一个作者又可以出版多本书 from sqlalchemy import Table, ...
- EF如何操作内存中的数据以及加载相关联表的数据:延迟加载、贪婪加载、显示加载
之前的EF Code First系列讲了那么多如何配置实体和数据库表的关系,显然配置只是辅助,使用EF操作数据库才是每天开发中都需要用的,这个系列讲讲如何使用EF操作数据库.老版本的EF主要是通过Ob ...
- AppBox升级进行时 - 关联表查询与更新(Entity Framework)
AppBox 是基于 FineUI 的通用权限管理框架,包括用户管理.职称管理.部门管理.角色管理.角色权限管理等模块. 关联表的查询操作 使用 Include 方法,我们可以在一次数据库查询中将关联 ...
- SqlServer 查询表、表说明、关联表、字段说明,语句汇总
----查询所有的表 SELECT * FROM SYSOBJECTS WHERE TYPE='U' ----根据表名查询所有的字段名及其注释 SELECT A.NAME,B.VALUE FROM S ...
- mysql 多表删除
删除用户数据,我们就需要删除有关用户的所有数据. 主表是有数据的,其他关联表不一定有数据,我们可以用left join 来关联删除的表. eg:table1 是主表,t2,t3是关联表. SELECT ...
- MySQL--表操作(约束条件foreign key关联表 多对1,多对多,1对1)
一.所有数据都存放于一张表中的弊端:1.表的组织结构复杂不清晰2.浪费空间3.扩展性极差 解决方案:分表a.分表 + foreign key: 有硬性限制(关联表中的关联字段内容必须来自于被关联表), ...
- [PHP]更新中间关联表数据的两种思路
---------------------------------------------------------------------------------------------------- ...
随机推荐
- 联想ThinkPadE455实现FN禁用(F1-F12标准功能与特殊功能切换)
系统:Win7 64 位 机型:联想ThinkPadE455笔记本 方法一:键盘Fn热键切换功能(亲测可用) Fn+Esc FnLk 组合键方法启用或禁用Fn锁定功能 具体说明(这个逻辑 ...
- MemSQL 架构初探
MemSQL 自称是最快的内存数据库.目前已发布了2.5版本. MemSQL 具有以下特点 1 高效的并行,尤其是分布式的MemSQL. 2 高效的并发,采用lock-free的内存数据结构skip ...
- 获取本地机器的特征码IP MAC
using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Ma ...
- c#中partial 作用
申明一下:我也是在百度上找的答案,然后合起来的,这样感觉好理解一点!partial是局部类型的意思就是说有这个关键字的类.结构或接口可以写成几个部分比如: public partial class P ...
- SQLServer分页查询笔记
学习SqlServer到现在快两年了吧,分页查询总是忘了看笔记,看了又忘.之前用的分页都是row_number函数的方式,背不住...直到今天,看到别人写的另一种分页写法,看似比row_number简 ...
- Oracle Database 12c Preinstall Steps for Oracle Linux Simplified
This post is a quick reminder that Oracle Linux includes a handy RPM to address pre-installation req ...
- shell 的echo和 printf
shell的echo指令是输出语句 就好比Python的print 在显示字符串的时候可以省略双引号 但是最好还是带上 echo ' Ti is a dashaobing' echo Ti is ...
- [Python_5] Python 线程
0. 说明 Python 线程笔记 1. 低级 API # -*-coding:utf-8-*- """ 线程 """ "&quo ...
- 【存在问题,待修改】SSH 远程登陆
0. 前提 设置 hosts 参考链接 Linux 配置 hosts SSH公钥登录原理 1. SSH 是什么 SSH ( Secure Shell ) 是一种协议标准,其目的是实现安全远程登录以及其 ...
- Python第一篇-简介和入门
简介: Python[1] (英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/), 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第 ...