Python 我可以在SQLAlchemy ORM中使用动态关系(或视图)吗?
我正在寻找一种方法,使关系只使用表中的一些行,而不是整个表 我正在考虑使用视图而不是原始表作为关系的基础。其中,视图仅包含原始表中经过筛选的一组行 例子 我想通过不同的设备和不同的用户从几个播放器收集歌曲的统计信息(评级、播放次数、上次播放)。我使用Python和 我提出了以下表格布局(您可以查看和): 问题 对于每个Python 我可以在SQLAlchemy ORM中使用动态关系(或视图)吗?,python,sql,orm,sqlalchemy,Python,Sql,Orm,Sqlalchemy,我正在寻找一种方法,使关系只使用表中的一些行,而不是整个表 我正在考虑使用视图而不是原始表作为关系的基础。其中,视图仅包含原始表中经过筛选的一组行 例子 我想通过不同的设备和不同的用户从几个播放器收集歌曲的统计信息(评级、播放次数、上次播放)。我使用Python和 我提出了以下表格布局(您可以查看和): 问题 对于每个歌曲对象,我可以轻松获得所有相关的统计数据对象。但大多数时候我只想要其中的一些。我只想要与一个或多个提交相关的歌曲的统计数据,例如,仅来自给定用户的所有提交或某个提交的数据 所以
歌曲
对象,我可以轻松获得所有相关的统计数据
对象。但大多数时候我只想要其中的一些。我只想要与一个或多个提交相关的歌曲的统计数据
,例如,仅来自给定用户的所有提交或某个提交的数据
所以我需要一些方法来过滤歌曲对象上的统计数据。
我不知道该如何存档
我应该使用一些自定义查询吗?但是我应该把它放在哪里,怎么放?另外:虽然这可能会给我想要的数据(select path,rating…,在三个连接的表上)
or),但我不会取回对象
我正在考虑在stats
表上使用视图,只包含与给定提交匹配的行。视图必须动态创建,以便可以过滤不同的提交。而不是使用此视图作为从歌曲
到统计数据
的关系的基础。但是我不知道怎么做
那么:关于如何解决这个问题有什么想法吗
或者如何用另一种方法解决这个问题?您可以尝试以下方法:
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
现在我使用直接SQL查询,比如。它为我提供了数据,但我更喜欢将Song
对象和经过过滤的Stats
映射到它,这样我可以在Song
对象上进一步处理它们。我知道如何实现这一点,但我需要更多的细节。这种观点是暂时的还是具体化的?你在使用Postgresql吗?因此,在python中,您希望在第一次使用提交id查询Stats时创建一个视图。该查询的所有后续查询都将使用该视图,而不是原始表?很酷,我以前从未听说过object\u session
。我现在无法测试你的代码,但看起来不错。虽然这更像是我现在使用的变通方法,而不是我正在寻找的东西。我试图把问题弄清楚。我不确定我是否完全理解为什么要使用视图而不是查询。一些动机可能会有帮助。。。