如何使用SQLAlchemy仅选择一列?

如何使用SQLAlchemy仅选择一列?,第1张

如何使用SQLAlchemy仅选择一列?

一个

Query
对象接受实体查询作为位置参数,所以只是通过它
User.id

user_id = session.query(User.id).        filter(User.validation == request.cookies.get("validation")).        scalar()

scalar()
返回第一个结果的第一个元素;如果未找到任何行,则返回None。它为多行引发MultipleResultsFound异常。

load_only()
表示仅应加载实体的给定基于列的属性,而其他所有期望标识的属性将被延迟。如果以后确实需要整个
User
模型对象,则可以采用这种方法。在这种情况下,原始查询必须更改为:

user = session.query(User).        filter(User.validation == request.cookies.get("validation")).        options(load_only("id")).        one()

one()
仅返回一个结果或引发异常(0个或多个1个结果)。如果您接受
None
“没有找到用户”作为有效的返回值,请使用
one_or_none()

请注意,谓词(WHERe子句的条件)不应

Query
作为实体传递给对象,而应与一起添加
filter()

最重要的是,Flask中的视图期望您返回以下之一:

  • 有效的响应对象
  • 一个字符串
  • 一个
    (response, status, headers)
    元组
  • WSGI应用程序

机器会将响应对象,字符串或元组以外的任何内容都视为WSGI应用程序。在您的原始代码中,

Query
由于缺少对
scalar()
此类的调用,您返回了一个对象,然后将该对象视为WSGI应用程序。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4892791.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-12
下一篇 2022-11-12

发表评论

登录后才能评论

评论列表(0条)

保存