烧瓶 SQLlChemy 一对多过滤器、计数和分组



>我目前正在尝试构建一个查询 给我一个一对多的SQLllChemy查询 在 Flask 中,我的结果过滤器都分组,然后说它有多少个单独的条目

以下是我的数据库模型来说明这个问题:

class cellphone(db.Model):
__tablename__ = 'cellphone'
id = db.Column(db.Integer, primary_key = True)
number = db.Column(db.String(30), unique=True)
sms = db.relationship('sms_accounting',  backref="cellphone", lazy='dynamic')

class sms_accounting(db.Model):
__tablename__ = 'sms_accounting'
id = db.Column(db.Integer, primary_key = True)
timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
cellphone_id = db.Column(db.Integer, db.ForeignKey('cellphone.id'))

我现在想做的是找出每个号码在 X 天内发送了多少条短信。

我设法进行了过滤和分组,但无法正确计算每个设备的总和。

def sms_count():
search_peroid='90' #time to fetch events in days
period_start = datetime.utcnow() - timedelta(hours=int(search_peroid))
phone_count = sms_accounting.query.filter(sms_accounting.timestamp.between(period_start, 
datetime.utcnow() )).group_by(sms_accounting.cellphone_id).all()

我找到了一些func.count的例子,但不幸的是,它们都不起作用。这已经从用法开始了,

AttributeError: BaseQuery object has no attribute 'func'

即使它是特别进口的。

from sqlalchemy.sql.functions import func

如果我错了,请原谅我。

作为一种选择,您可以尝试通过 Flask 执行 SQL 查询。

db.session.execute('select number, count(sms_accounting.id) from cellphone join sms_accounting on sms_accounting.cellphone_id = cellphone.id');

您可以使用where轻松添加基于时间的过滤器。

关于AttributeError,您确定正确使用了"func"方法吗?正确的用法可以在 https://stackoverflow.com/a/4086229/4854064 这个不相关的答案中找到。可能是您不小心调用了func作为query对象的方法。

最新更新