gpt4 book ai didi

python - 我怎样才能避免多次循环来获得我在这个 sqlalchemy 查询中需要的排序?

转载 作者:太空宇宙 更新时间:2023-11-03 15:23:01 24 4
gpt4 key购买 nike

我正在学习 pyramid 和 sqlalchemy,并且正在努力研究如何最好地在没有嵌套 foreach 循环的情况下在数据库中执行查询。我相信有更有效的方法。

我有以下模型:

    class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
username = Column(Text)
topicsfollowing = relationship('Topic', secondary=users_topics,
backref='followers')

class Article(Base):
__tablename__ = 'articles'
id = Column(Integer, primary_key=True)
name = Column(Text)
body = Column(Text)
datepublished = Column(DateTime)
focusid = Column(Integer, ForeignKey("topics.id"))
focus = relationship("Topic", backref=backref('articles', order_by=id))

class Topic(Base):
__tablename__ = 'topics'
id = Column(Integer, primary_key=True)
name = Column(Text)

并且我还建立了用户和主题之间的M2M关系如下:

    users_topics = Table('users_topics', Base.metadata,
Column('userid', Integer, ForeignKey('users.id')),
Column('topicid', Integer, ForeignKey('topics.id')))

基本上,我的用户可以关注主题,而且每个主题(焦点)都有文章。我想弄清楚的是一种有效的方法,可以从用户关注的所有主题的集合中获取 10 篇最新文章的列表。例如,一个特定主题可以提供所有 10 个最新的主题,或者可能有 10 个主题,每个主题提供一篇最近的文章。

我能想到的唯一方法是:

    user = DBSession.query(User).filter_by(id=logged_in).first()
for topic in user.topicsfollowing:
for article in topic.articles:
# from here assemble a list of all articles from all followed
# topics and then sort them descending by datepublished and take
# the first 10 in the list

但我知道必须有一种更有效的方法来做到这一点。任何帮助将不胜感激。

最佳答案

您只需执行一次查询即可获取用户关注的主题 ID 列表,然后执行如下操作:

query(Article).filter(Article.focusid.in_(topic_ids)).order_by(desc(Article.datepublished)).limit(10)

我或多或少是在脑海中写下的,所以我不确定它是否 100% 正确,但请参阅 docs 中的“IN”运算符。 .

关于python - 我怎样才能避免多次循环来获得我在这个 sqlalchemy 查询中需要的排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11945435/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com