我正在寻找一种方法,因此关系只使用表的某些行,而不是整个表。
我在考虑使用视图而不是原始表作为关系的基础。 视图仅包含原始表中已过滤的行集。
我想收集来自不同设备和不同用户的几位玩家的歌曲(评分,播放次数,上次播放时间)的统计信息。我使用 Python 和SQL Alchemy。
我提出了以下表格布局(您可以查看code for the objects和SQL for the tables):
对于每个Song
对象,我可以轻松获取所有关联的 Stats
对象。但大多数时候我只想要其中一些。我只想要Stats
与Song
相关的Commit
,例如。select path, rating... over the three joined tables
。只有给定用户提交的所有提交数据或某个提交的数据。
所以我需要一些方法来过滤歌曲对象上的统计数据。
我不确定如何归档这个。
我应该使用一些自定义查询吗?但是我在哪里放置它以及如何放置它?另外:虽然这可能会给我我想要的数据(stats
或something along those lines),但我不会让对象回来。
我在考虑在commits
表上使用视图,只包含与给定songs
匹配的行。必须动态创建视图,以便可以过滤不同的提交。而不是将此视图用作stats
到{{1}}之间关系的基础。但我不知道该怎么做。
那么:关于如何解决这个问题的任何想法?
或者如何解决另一种方式?
答案 0 :(得分:1)
您可以尝试这样的事情:
from sqlalchemy.orm import object_session
# defined inside of your Song class
def stats_by_commit(self,commit):
#this could also be implemented as a join
return object_session(self).query(Stat)\
.filter(Stat.song_id == self.song_id,Stat.commit_id == Commit.commit_id)
用法:
commit = db_session.query(Commit).filter_by(id=1)
for song in db_session.query(Song).filter_by(path='some_song_path'):
for stat in song.stats_by_commit(self,commit):
print stat.rating