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 ,如需转载请自行联系原作者
相关文章
|
3月前
|
人工智能 自然语言处理 API
阿里云百炼 Token Plan 全解析:个人版与团队版支持模型、套餐定价、API调用实战教程
随着大模型落地场景持续拓宽,文本生成、图像绘制、视频生成、语音交互、代码智能体等需求同步爆发,开发者与企业往往需要同时接入十余款不同厂商模型,单独采购各模型Token套餐不仅管理繁琐,整体调用成本也难以管控。阿里云百炼推出TokenPlan订阅服务,采用统一Credits额度抵扣机制,一份订阅即可兼容数十款主流AI模型,覆盖文本、视觉、音视频全品类能力,同时区分个人版、团队版两大订阅体系,分别匹配独立开发者、企业协作团队两类使用人群,通过包月固定费用模式精准控制月度AI预算,规避按量计费带来的账单波动风险。
703 2
|
2月前
|
缓存 自然语言处理 运维
榨出高纯度 Prompt:大模型混合检索 Rerank 调优全流程
混合检索虽提升了召回率,但因量纲不一和双塔模型语义折损,易导致噪声挤占 Prompt 引发幻觉。 本文深入探讨“大模型知识库混合检索重排序 Rerank 实践”,拆解“多路粗召回 + RRF 融合 + Cross-Encoder 精确打分 + 动态阈值截断”的两阶段标准架构。同时横向对比 BGE、Cohere 等主流选型,并针对延迟优化与元数据注入提供实操调优技巧,助力系统实现高精度输出。
445 0
|
5月前
|
Kubernetes 网络协议 异构计算
云上 K8s GPU 节点 ImagePullBackOff 排查记录
本文记录云上K8s(v1.36)GPU节点模型评测Job因`ImagePullBackOff`卡在Pending的排查过程,聚焦containerd镜像拉取失败根因,涵盖crictl验证、日志分析、DNS/镜像源配置检查,并强调分层排障:先运行时,再资源调度与设备挂载。
|
3月前
|
弹性计算 负载均衡 算法
阿里云负载均衡 SLB 终极教程:从零构建高性能网站高可用部署方案
本文由阿里云官方代理商零度云撰写,详解如何基于阿里云SLB构建生产级高可用网站架构:跨可用区部署ECS、RDS+Redis保障数据与会话一致性、四步完成SLB配置,并通过实战验证毫秒级故障自动隔离与恢复能力。
|
4月前
|
JavaScript 前端开发 NoSQL
PHP+Vue即时通讯源码2026最新- WebSocket聊天系统源码开源搭建
这是一套2026年最新商用开源IM源码(PHP+Swoole+Vue3+WebSocket),涵盖私聊/群聊/离线消息/文件传输/音视频信令等全功能,支持PC/H5/小程序多端,零基础可部署。
695 0
|
5月前
|
边缘计算 缓存 安全
AIWCLOUD:高防免备案CDN,大陆节点免备、免实。
本文介绍一种“大陆节点免备案、免实名”的高防CDN方案:通过整合非经营性IDC带宽、传输层协议伪装(如端口复用、流量特征抹平),结合硬件指纹零信任准入、边缘动态缓存与TLS加速,实现合规、隐匿、高性能的大陆访问加速。
449 4
|
5月前
|
人工智能 自然语言处理 Java
Java做AI真不行?2026年最被低估的机会来了
Spring官宣集成DeepSeek,Java正式迈入AI驱动时代!2026年AI岗位缺口巨大,大厂招聘普遍要求大模型能力。Java团队借力Spring生态与JBoltAI等国产框架,可低门槛接入代码生成、RAG、Agent等全链路AI能力,实现差异化突围。(239字)
509 3
|
人工智能 安全 Serverless
人人都在造 Skill,谁来保障安全运行?
阿里云AgentRun全新升级:支持Skills安全私域托管、沙箱隔离与秒级加载,内置千种开箱即用AI技能,助力开发者构建安全、高效、可规模化的智能体应用。
|
4月前
|
运维 前端开发 安全
深度技术解析:无人自助棋牌室系统技术栈演进与资金结算合规升级方案
一套成熟的无人自助棋牌室系统,不仅要实现“无人值守、自助经营”的基础功能,更需要具备合规安全、灵活迭代、高效低成本、可规模化复制的资金结算能力。 分账链的核心价值,便是补齐了无人自助棋牌室行业数十年的技术短板,通过专属的底层合规架构、动态分账逻辑、轻量化接入体系、优化的资金流转模型,完成无人自助系统全技术栈的闭环升级。让棋牌品牌彻底摆脱资金合规风险与运营效率桎梏,实现从单店运营到连锁规模化、从野蛮生长到合规高质量发展的跨越式升级,重塑行业技术标准与商业格局。
365 0

热门文章

最新文章