首页/新闻资讯/正文详情

用一局太空侵略者看懂 SQLAlchemy ORM:多态继承与 joinedload 预加载实战

发布时间:2026/11/4 1:47:00 来源:云帆数科 栏目:资讯中心
用一局太空侵略者看懂 SQLAlchemy ORM:多态继承与 joinedload 预加载实战
用一局太空侵略者看懂 SQLAlchemy ORM多态继承与 joinedload 预加载实战【免费下载链接】sqlalchemyThe Database Toolkit for Python项目地址: https://gitcode.com/gh_mirrors/sq/sqlalchemySQLAlchemy ORM 常被当成 CRUD 脚手架但仓库里藏着一个比较深的例子一个用终端 curses 画出来的太空侵略者游戏运行状态、碰撞判断、动画刷新全部压在 ORM 之上。我们以它为例倒推三件事——如何用一张表装下多种敌人、如何把碰撞检测写成一条 SQL以及为什么一个joinedload能救回一批查询。先跑起来500 行终端射击游戏背后例子在 space_invaders.py 里单文件、无第三方依赖跑起来就是一局可玩的射击游戏。建库和建表只用了四行e create_engine(sqlite://) Base.metadata.create_all(e) session Session(e) init_glyph(session) session.commit()sqlite://是纯内存库create_all一次建完所有表之后对象都挂在同一个Session上。游戏每 10ms 刷新一次而每帧场上有什么都是从数据库查出来的——这正是它作为 ORM 案例的意义所在。单表多态一张 glyph 表装下所有敌人游戏里有军队、UFO、玩家船、导弹、爆炸、提示文字类型很多ORM 却用单表继承把它们塞进同一张glyph表。polymorphic_on 就是类型判别列class Glyph(Base): __tablename__ glyph id Column(Integer, primary_keyTrue) type Column(String) __mapper_args__ {polymorphic_on: type} class ArmyGlyph(EnemyGlyph): __mapper_args__ {polymorphic_identity: army} class GlyphCoordinate(Base): __tablename__ glyph_coordinate glyph_id Column(Integer, ForeignKey(glyph.id)) x Column(Integer) y Column(Integer) glyph relationship(Glyph, innerjoinTrue)polymorphic_on指定type列作判别列polymorphic_identity给每个子类一个字符串标签。查出来时 ORM 按type的值把行还原成正确的子类ArmyGlyph、SaucerGlyph各自带上自己的方法。更多规则见 inheritance.rst。把碰撞检测写进 SQLof_type 与 hybrid_method常规做法是把坐标加载进内存用 Python 逐个判断矩形是否相交。这里反了过来让数据库来做几何判断。intersects 把判断下推到数据库hybrid_method def intersects(self, other): return ~( (self.x self.width other.x) | (self.x other.x other.width) ) ~( (self.y self.height other.y) | (self.y other.y other.height) )hybrid_method让它在 Python 端和 SQL 端都能用于是判负逻辑可以整段下推def check_lose(session, state): player state[player] return ( session.query(GlyphCoordinate) .join(GlyphCoordinate.glyph.of_type(ArmyGlyph)) .filter( GlyphCoordinate.intersects(player) | GlyphCoordinate.bottom_bound ) .count() )of_type(ArmyGlyph)把继承查询收窄到军队这一支再配合intersects生成一条带几何条件的COUNT命中即判负。一次往返没有把全部坐标拉回内存。调优joinedload 如何救你的 N1渲染阶段如果不用预加载每访问一次gcoord.glyph就多发一条查询十几个敌人就是十几条额外往返。joinedload 一次 JOIN 取回关联def draw(session, window, state): for gcoord in session.query(GlyphCoordinate).options( joinedload(GlyphCoordinate.glyph) ): gcoord.render(window, state)joinedload让glyph_coordinate与glyph一次 JOIN 取回把 N1 压回单条 SQL。策略取舍可参考 loading_relationships.rst。对这种小结果集、高频刷新的场景joinedload基本是默认最优解行数极大时再换subqueryload/selectinload。下一步想继续拆可以顺着 space_invaders.py 看move_army如何用func.min/func.max算出军队边界并整体平移或把单表继承换成 joined-table对比多出来的 JOIN。这个例子的价值在于它把多态、hybrid、预加载几件事压缩进了一个能跑、能玩、能看 SQL 的闭环里。【免费下载链接】sqlalchemyThe Database Toolkit for Python项目地址: https://gitcode.com/gh_mirrors/sq/sqlalchemy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关推荐

深度揭秘:Hermes Agent如何构建企业级多智能体通信架构
深度揭秘:Hermes Agent如何构建企业级多智能体通信架构

深度揭秘:Hermes Agent如何构建企业级多智能体通信架构 在当今分布式AI系统日益复杂的背景下,多智能体协作的效率直接决定了系统的整体性能。Hermes Agent作为一款面向企业级应用的开源多智能体框架,通过创新的消息传递机制和智能协调协议&a… · 2026/11/4 1:46:00

3个高级配置技巧:解锁Hermes Agent的隐藏潜能
3个高级配置技巧:解锁Hermes Agent的隐藏潜能

3个高级配置技巧:解锁Hermes Agent的隐藏潜能 你是否曾想过,为什么同样的Hermes Agent在不同开发者手中表现差异如此之大?当其他人轻松处理复杂任务时,你的Agent却频繁遇到上下文限制或响应迟缓的问题。这并非模型能力不足&#… · 2026/11/4 1:46:00

双态持久化记忆系统:重新定义AI助手的长时记忆范式
双态持久化记忆系统:重新定义AI助手的长时记忆范式

双态持久化记忆系统:重新定义AI助手的长时记忆范式 在传统AI助手领域,"健忘症"一直是制约用户体验的核心瓶颈。每个会话都是孤立的,AI无法记住用户的偏好、工作习惯或历史约定,导致重复的配置和低效的交互。Hermes Age… · 2026/11/4 1:46:00

生产没管好,不是因为难管,而是因为这12点
生产没管好,不是因为难管,而是因为这12点

生产现场最怕的是什么? 人员安排了,干活却不熟练; 生产计划下了,物料设备却没准备好; 管理人员天天巡查,问题还是反复出现; 每天忙到下班,产量、质量、交期却总有一项达不到要求。 看… · 2026/11/4 2:38:16

工业控制系统深度解析:33 液位控制回路
工业控制系统深度解析:33 液位控制回路

第33章 液位控制回路 33.1 液位控制为什么特殊? 液位(Level)是工业过程最常见的控制变量之一。典型对象:储罐、反应釜、锅炉汽包、水箱、分离器、缓冲罐。 表面看,液位控制很简单:液位高了减少进料,液位低了增加进料。但液位控制在工业中却是一个非常特殊的控制问题。… · 2026/11/4 2:38:16

微信小程序:文件操作
微信小程序:文件操作

一、项目简介本案例演示微信小程序FileSystemManager 文件管理器API,实现本地用户文件的:写文件、复制文件、读文件、获取文件信息。 作业扩展:新增删除文件按钮,实现删除复制出来的hello_copy.txt文件,页面标题与消息… · 2026/11/4 2:38:16

分类是科学的基础
分类是科学的基础

摘要:分类不是整理技巧,而是认知与科学的起点。米老师强调“分类是科学的基础”“生与死的差别”,本质上是指:分类决定你看到什么、如何解释、采取什么行动。分类弱和找关联弱往往是同一个瓶颈——缺少可用的类别结构。文章的推理… · 2026/11/4 2:38:16

Zig 系统编程也能如此简单
Zig 系统编程也能如此简单

第 1 章 为什么是 Zig 本章目标:搞清楚 Zig 是什么、解决什么问题、什么时候该用它、什么时候不该用它。我们会跑通第一个程序,并亲眼看见 Zig 的"安全网"如何在运行时抓住一个 C 语言里会静默变成安全漏洞的错误。 从入门到精通的实战之路 基于 Zig 0.17.0(2026-… · 2026/11/4 2:38:16

大型制造集团智能制造人才体系建设:三年人才规划怎么做【HR注意】
大型制造集团智能制造人才体系建设:三年人才规划怎么做【HR注意】

2026智能制造人才体系与战略HR规划指南|倍利福一家拥有8家工厂的制造集团,计划未来三年投入资金推进产线自动化、MES升级、设备数据采集和工业AI应用。 设备采购完成了,系统也陆续上线,但半年后发现:OT团队不懂软件&am… · 2026/11/4 2:37:16

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/2 13:10:28

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码