首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >执行flask-SQLAlchemy子查询

执行flask-SQLAlchemy子查询
EN

Stack Overflow用户
提问于 2016-08-17 22:32:08
回答 1查看 5.6K关注 0票数 5

我想在flask-SQLAlchemy中执行以下子查询,但不知道如何执行:

代码语言:javascript
复制
SELECT * 
FROM (
     SELECT * 
     FROM  `articles` 
     WHERE publisher_id = "bild"
     ORDER BY date_time DESC 
     LIMIT 10
) AS t
ORDER BY RAND( ) 
LIMIT 2

我知道我可以这样构建查询:

代码语言:javascript
复制
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)

然而,我不知道如何以与执行相同的方式执行它。

代码语言:javascript
复制
articles = Article.query.filter(Article.publisher_id =='bild').all()

即获取所有的文章对象。我能做的就是调用

代码语言:javascript
复制
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。谢谢!!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-08-18 00:16:14

您可以使用select_entity_from

代码语言:javascript
复制
qry = db.session.query(Article).select_entity_from(subq).order_by(func.rand()).limit(2)

from_self

代码语言:javascript
复制
Article.query.filter(Article.publisher_id =='bild')\
             .order_by(Article.date_time.desc())\
             .limit(10)\
             .from_self()\
             .order_by(func.rand())\
             .limit(2)
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38999534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档