我有一个表格可以跟踪我的应用的所有网页浏览量。
class Tracking_visits(db.Model):
id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('users_user.id'), nullable=False)
ts = db.Column(db.DateTime(timezone=True), default=datetime.datetime.utcnow().replace(tzinfo=pytz.UTC))
此代码可以很好地按月/年分组访问。
db.session.query(func.count(Tracking_visits.id), extract('month', Tracking_visits.ts).label('m'), extract('year', Tracking_visits.ts).label('y')).group_by('m', 'y').order_by('m', 'y').all()
现在我有另一个目标。我需要获得独特访问的总数。用户可以进行多次访问,但在这种情况下,我只对按月进行独特访问感兴趣。我怎么能这样做?
我读过有关func.distinct()
的内容,但我不确定如何将其应用于上述查询。
答案 0 :(得分:1)
您只需要更改.query
参数,以便func.count()
对distinct()
进行操作,Trackin_visits.user_id
作为参数:
db.session.query(func.count(distinct(Tracking_visits.user_id)),
extract('month', Tracking_visits.ts).label('m'),
extract('year', Tracking_visits.ts).label('y'))
.group_by('m', 'y')
.order_by('m', 'y')
.all()
可以在以下网站找到查询文档,如果向下滚动到Count()
,您将找到以这种方式使用不同的示例:http://docs.sqlalchemy.org/en/rel_1_0/orm/query.html#the-query-object