2016-10-07 75 views
1

我寫這條巨蟒功能來查詢使用的SQLAlchemy包數據庫:組由多個列中的SQLAlchemy

def group_by_one_var(start_date, end_date, groupby): 
    data = db.session.query(
     groupby, 
     MyModel.SnapDate, 
     func.count(MyModel.CustomerID).label("TotalCustomers") 
    )\ 
    .filter(
     MyModel.SnapDate >= start_date, 
     MyModel.SnapDate <= end_date 
    )\ 
    .group_by(
     groupby 
    ).all() 
    return(data) 

test_1 = group_by_one_var("2016-08-01", "2016-08-31", MyModel.Country) # Success 

這確實由我選擇的變量分組我查詢的一個好工作。

但是,當涉及到由多個變量進行分組時,我被卡住了。

這是一個功能我用兩個變量寫給組:

def group_by_two_vars(start_date, end_date, groupby): 
    data = db.session.query(
     groupby[0], 
     groupby[1], 
     MyModel.SnapDate, 
     func.count(MyModel.CustomerID).label("TotalCustomers") 
    )\ 
    .filter(
     MyModel.SnapDate >= start_date, 
     MyModel.SnapDate <= end_date 
    )\ 
    .group_by(
     groupby[0] 
    )\ 
    .group_by(
     groupby[1] 
    ).all() 
    return(data) 

tes2 = group_by_two_vars("2016-08-01", "2016-08-31", (MyModel.Country, MyModel.Currency)) # Success 

此功能也做了很好的工作由我選擇的兩個變量分組我的查詢。

如何修改這些函數以接受動態數量的分組?

謝謝!

+0

您是否嘗試過'.group_by(* GROUPBY)'? –

+0

是的,謝謝堆,這就是我以後的事! – efbbrown

回答

0

這是你如何解析的GROUPBY參數的動態數量,並SQLAlchemy的包括他們所有的查詢:

def group_by_n_vars(start_date, end_date, *groupby): 
    data = db.session.query(
     *groupby, 
     MyModel.BookingDateLocal, 
     func.count(MyModel.BookingId).label("TotalCustomers") 
    )\ 
    .filter(
     MyModel.SnapDate >= start_date, 
     MyModel.SnapDate <= end_date 
    )\ 
    .group_by(
     *groupby 
    ).all() 
    return(data)