我最近升级到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)
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
| 归档时间: |
|
| 查看次数: |
11214 次 |
| 最近记录: |