SqlAlchemy中汇总数据创建实体
Create an entity by summarizing data in SqlAlchemy
我正在使用有关视频游戏中战斗数据的现有模式,因为我必须使用外部程序生成的数据。此架构在技术上与我想要组织数据的方式不兼容,但它大部分都有效。
(到目前为止)出现 3 次的一个问题是向用户提供大量 table 数据 browse/search 以开始筛选可用数据。因此,我决定采用一种通用的方式来生成数据 table,并处理 AJAX 对 table 的更多数据的请求。
问题在于,其中一种情况基本上是直接从 table 中检索数据,而另一种情况实际上是从 table 中检索汇总数据。例如,模式定义了一个'Combatant',或者一个战斗的参与者,但我希望系统暴露一个'Character'的概念,或者一个存在并参与许多战斗的东西。因此,Character
将是多个不同 Encounter
中的 Combatant
。
基本上有两种方法可以让我从数据库中创建角色的想法。我可以使用视图,也可以让我的 ORM (SQLAlchemy) 每次都从头开始创建所需的查询。在 SQLAlchemy 中可以通过一些 possible extensions 来支持视图,但是因为我在总结,所以我丢失了主键,因此我无法创建表示视图的 ORM class。据说,您可以强制将列作为主键,但这对我不起作用(似乎什么也没做)。如果我尝试从头开始使用查询,我当前生成通用 table 的方法将无法检查(...)查询结果。
所以,我有两个问题,a MCVE 关于从头开始查询的方法:
我是否采取了解决这个已知问题的方法?
有没有办法避免使用 inspect(...) 让我使用任意字符串从查询结果对象中获取值?
关于 MCVE 的一些注意事项:
我已经删除了 ORM 对象的数量、每个对象中的列以及列列表中的配置信息。列列表的原始形式很难看。
双嵌套 for
循环在 MCVE 中,我的实际代码中有一个模板系统。 Web 服务器,生成 HTML,所有常见的乐趣都被剥离出来,专注于 SQLAlchemy。
我最终使用 this code for Materialized Views 解决了这个问题。所以,所有的聚合都是由数据库完成的,而 SQLAlchemy 只是将视图视为另一个可选的。
我正在使用有关视频游戏中战斗数据的现有模式,因为我必须使用外部程序生成的数据。此架构在技术上与我想要组织数据的方式不兼容,但它大部分都有效。
(到目前为止)出现 3 次的一个问题是向用户提供大量 table 数据 browse/search 以开始筛选可用数据。因此,我决定采用一种通用的方式来生成数据 table,并处理 AJAX 对 table 的更多数据的请求。
问题在于,其中一种情况基本上是直接从 table 中检索数据,而另一种情况实际上是从 table 中检索汇总数据。例如,模式定义了一个'Combatant',或者一个战斗的参与者,但我希望系统暴露一个'Character'的概念,或者一个存在并参与许多战斗的东西。因此,Character
将是多个不同 Encounter
中的 Combatant
。
基本上有两种方法可以让我从数据库中创建角色的想法。我可以使用视图,也可以让我的 ORM (SQLAlchemy) 每次都从头开始创建所需的查询。在 SQLAlchemy 中可以通过一些 possible extensions 来支持视图,但是因为我在总结,所以我丢失了主键,因此我无法创建表示视图的 ORM class。据说,您可以强制将列作为主键,但这对我不起作用(似乎什么也没做)。如果我尝试从头开始使用查询,我当前生成通用 table 的方法将无法检查(...)查询结果。
所以,我有两个问题,a MCVE 关于从头开始查询的方法:
我是否采取了解决这个已知问题的方法?
有没有办法避免使用 inspect(...) 让我使用任意字符串从查询结果对象中获取值?
关于 MCVE 的一些注意事项:
我已经删除了 ORM 对象的数量、每个对象中的列以及列列表中的配置信息。列列表的原始形式很难看。
双嵌套
for
循环在 MCVE 中,我的实际代码中有一个模板系统。 Web 服务器,生成 HTML,所有常见的乐趣都被剥离出来,专注于 SQLAlchemy。
我最终使用 this code for Materialized Views 解决了这个问题。所以,所有的聚合都是由数据库完成的,而 SQLAlchemy 只是将视图视为另一个可选的。