Python 使用窗口函数限制Postgres上使用SqlAlchemy的查询

Python 使用窗口函数限制Postgres上使用SqlAlchemy的查询,python,sql,sqlalchemy,Python,Sql,Sqlalchemy,我正在尝试使用sqlalchemy ORM编写以下sql查询: 从中选择* 选择*,行号超过 从中选择不同的用户id,从内容中选择作者id*c 窗口w作为分区,按grand_id顺序,按随机顺序作为v1 行数窗口化的内容。c.行数与标签对应是如何操作的,对我来说是有效的。注意,select_entity_from方法在SQLA 0.8.2中是新的,在0.9中需要,而select_from则需要: 函数行号。结束。。。在0.5版本中不起作用,所以变通方法?0.5是六年前发布的。升级否则,文本形式(

我正在尝试使用sqlalchemy ORM编写以下sql查询:

从中选择* 选择*,行号超过 从中选择不同的用户id,从内容中选择作者id*c 窗口w作为分区,按grand_id顺序,按随机顺序作为v1 行数窗口化的内容。c.行数与标签对应是如何操作的,对我来说是有效的。注意,select_entity_from方法在SQLA 0.8.2中是新的,在0.9中需要,而select_from则需要:


函数行号。结束。。。在0.5版本中不起作用,所以变通方法?0.5是六年前发布的。升级否则,文本形式(如textROW NUMBER OVER或类似)可能是最直接的路径。
s = Session()

unique_users_contents = (s.query(Content).distinct(Content.grandma_id,
                                                  Content.author_id)
                         .subquery())

windowed_contents = (s.query(Content,
                             func.row_number()
                             .over(partition_by=Content.grandma_id,
                                   order_by=func.random()))
                     .select_from(unique_users_contents)).subquery()

contents = (s.query(Content).select_from(windowed_contents)
            .filter(row_number >= 4)) ##  how can I reference the row_number() value?

result = contents
for content in result:
    print "%s\t%s\t%s" % (content.id, content.grandma_id,
                          content.author_id)
from sqlalchemy import *
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class Content(Base):
    __tablename__ = 'contents'

    grandma_id = Column(Integer, primary_key=True)
    author_id = Column(Integer, primary_key=True)


s = Session()

unique_users_contents = s.query(Content).distinct(
                            Content.grandma_id, Content.author_id).\
                            subquery('c')

q = s.query(
        Content,
        func.row_number().over(
                partition_by=Content.grandma_id,
                order_by=func.random()).label("row_number")
    ).select_entity_from(unique_users_contents).subquery()

q = s.query(Content).select_entity_from(q).filter(q.c.row_number <= 4)

print q