sqlAlchemy中的Sum字段

Rhi*_*rus 9 python sqlalchemy

我最近升级到sqlalchemy的最新版本,我的一些代码不再有效.我很难找到如何解决它并且可以用一只手.

以前查询似乎如此.

self.db.query(Drive).filter(Drive.package_id==package.package_id)\
    .filter(Drive.wipe_end!=None).sum(Drive.wipe_end - Drive.wipe_start)
Run Code Online (Sandbox Code Playgroud)

这工作之前检索一些持续时间的总和但现在我得到以下错误:

'Query' object has no attribute 'sum'
Run Code Online (Sandbox Code Playgroud)

我做的任何谷歌搜索都能获得几年前的信息.

sun*_*tos 15

我相信你需要"func"包中的sum()函数:

from sqlalchemy import func
cursor = self.db.query(func.sum(Drive.wipe_end - Drive.wipe_start)).filter(Drive.package_id==package.package_id).filter(Drive.wipe_end!=None)
total = cursor.scalar()
Run Code Online (Sandbox Code Playgroud)

  • 我在带有SQLAlchemy 1.12的Python 3中收到``TypeError:'BaseQuery'object not callable'',带有:``votes_sum = VotesReleases.query(func.sum(VotesReleases.Vote))。filter_by(ReleaseID = release_id).all( )。还是func.sum()不代表SQL的SUM()? (2认同)

Juh*_*nen 13

在 SQLAlchemy 1.1.13(2017 年 8 月 3 日发布)中,使用的语法sum()是这样的:

from sqlalchemy import func
from apps.mystuff.models import MyModel

some_value = "hello"

result = MyModel.query.with_entities(
             func.sum(MyModel.MyColumn).label("mySum")
         ).filter_by(
             MyValue=some_value
         ).first()

# Depending on the column datatype, it's either int:
print(result.mySum)

# Or if the data is decimal/float:
print(float(result.mySum))
Run Code Online (Sandbox Code Playgroud)

与原始答案相比,主要区别在于:
query(func.sum())

从版本 0.6.5 开始,语法已更改为:
query.with_entities(func.sum())

http://docs.sqlalchemy.org/en/latest/orm/query.html#sqlalchemy.orm.query.Query.with_entities