我想在flask-SQLAlchemy中执行以下子查询,但不知道如何执行:
SELECT *
FROM (
SELECT *
FROM `articles`
WHERE publisher_id = "bild"
ORDER BY date_time DESC
LIMIT 10
) AS t
ORDER BY RAND( )
LIMIT 2我知道我可以这样构建查询:
subq = Article.query.filter(Article.publisher_id =='bild').order_by(Article.date_time.desc()).limit(10).subquery()
qry = subq.select().order_by(func.rand()).limit(2)然而,我不知道如何以与执行相同的方式执行它。
articles = Article.query.filter(Article.publisher_id =='bild').all()即获取所有的文章对象。我能做的就是调用
db.session.execute(qry).fetchall()但这只给了我一个包含实际行值的列表,而不是我可以调用另一个函数(如article.to_json())的对象。
你有什么想法吗?qry是一个sqlalchemy.sql.selectable.Select对象,db.session.execute(qry)是一个sqlalchemy.engine.result.ResultProxy,而我可以调用all()的Article.query是一个flask_sqlalchemy.BaseQuery。谢谢!!
发布于 2016-08-18 00:16:14
您可以使用select_entity_from
qry = db.session.query(Article).select_entity_from(subq).order_by(func.rand()).limit(2)或from_self
Article.query.filter(Article.publisher_id =='bild')\
.order_by(Article.date_time.desc())\
.limit(10)\
.from_self()\
.order_by(func.rand())\
.limit(2)https://stackoverflow.com/questions/38999534
复制相似问题