2016-05-10 37 views
0

我有一張表可以跟蹤我應用的所有頁面查看。按月/年獲取唯一身份訪問者

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()的內容,但我不確定如何將其應用於上面的查詢。

回答

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