>我目前正在尝试构建一个查询 给我一个一对多的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
对象的方法。