【发布时间】:2013-11-15 13:32:03
【问题描述】:
我正在寻找一种方法,以便关系只使用表格的某些行,而不是整个表格。
我正在考虑使用 视图 而不是原始表作为关系的基础。 view 仅包含来自原始表的一组过滤行。
示例
我想收集来自不同设备和不同用户的几个播放器的歌曲统计信息(评分、播放次数、上次播放时间)。我使用 Python 和 SQL Alchemy。
我想出了下面的表格布局(你可以看看code for the objects和SQL for the tables):
问题
对于每个Song 对象,我可以轻松获得所有相关的 Stats 对象。但大多数时候我只想要其中一些。我只想要那些与一个或多个Commit 相关的Song 的Stats,例如。仅来自给定用户的所有提交或某个特定提交的数据。
所以我需要一些方法来过滤歌曲对象的统计数据。
我不确定如何存档。
我应该使用一些自定义查询吗?但是我应该把它放在哪里以及如何放置?另外:虽然这可能会给我我想要的数据(select path, rating... over the three joined tables 或 something along those lines),但我不会取回对象。
我正在考虑在stats 表上使用视图,只包含与给定commits 匹配的行。视图必须通过动态创建,因此可以过滤不同的提交。而不是将此视图用作从songs 到stats 的关系的基础。但我不知道该怎么做。
那么:关于如何解决这个问题的任何想法?
或者如何解决这个问题?
【问题讨论】:
-
现在我使用像this这样的直接SQL查询。它给了我数据,但我更喜欢
Song对象,并且只有过滤后的Stats映射到它,所以我可以在Song对象上进一步处理它们。 -
我知道如何实现这一点,但我需要更多细节。这种观点是暂时的还是物化的?你在使用 Postgresql 吗?因此,您希望在 python 中第一次使用 commit_id 查询 Stats 时创建一个视图。该查询的所有后续查询都将使用该视图,而不是原始表?
标签: python sql orm sqlalchemy