【问题标题】:flask sqlalchemy one-to-many filter, count & groupingflask sqlalchemy 一对多过滤、计数和分组
【发布时间】:2020-07-01 05:25:54
【问题描述】:

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

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

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 flask-sqlalchemy


    【解决方案1】:

    如果我错了,请原谅我。

    作为一种选择,您可以尝试通过 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 对象的方法。

    【讨论】:

      猜你喜欢
      • 2021-08-14
      • 1970-01-01
      • 2022-11-05
      • 1970-01-01
      • 2021-04-04
      • 2016-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多