我已经编写了这个python函数来使用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 :(得分:1)
这是解析动态数量的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)