mysql查询到sqlalchemy版本

2024-09-29 23:32:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我开始熟悉sqlalchemy,我有一个mysql查询如下:

SELECT COUNT( * ) AS total, SUM( IF(sub =  'N', 1, 0 ) ) AS NotSubscribed, SUM( IF( subscription =  'A', 1, 0 ) ) AS 12Month, SUM( IF( subscription =  'HY', 1, 0 ) ) AS 6Month, SUM( IF( subscription =  'M', 1, 0 ) ) AS 1Month
FROM accounts
WHERE userID IS NOT NULL

我正试图写一个sqlalchemy版本。在

^{pr2}$

我以以下错误结束:

sqlalchemy.exc.ArgumentError: SQL expression object or string expected

有人能帮我解决我的问题吗。如果没有,请让我知道除了文档之外,是否有任何关于sqlalchemy的好教程。在

谢谢


Tags: fromifsqlalchemyascountmysqlwhereselect
1条回答
网友
1楼 · 发布于 2024-09-29 23:32:23

sum是代码中的问题。要使其工作,您需要将sum和{}结合起来。下面展示了使用^{}的两种方法(选择一种你更喜欢的):

qry = select([
        func.count(users.c.userID).label("Total"),
        func.sum(case(value=users.c.sub, whens={'N': 1}, else_=0)).label("NotSubscribed"),
        func.sum(case(value=users.c.sub, whens={'A': 1}, else_=0)).label("12Month"),
        func.sum(case([(users.c.sub == 'HY', 1)], else_=0)).label("6Month"),
        func.sum(case([(users.c.sub == 'M', 1)], else_=0)).label("1Month"),
    ],
).where(users.c.userID != None)

res = engine.execute(qry)
print res.keys()     # column names
print res.fetchone() # values

但是,我确实会考虑Martijn的建议,相应的SA表达式是:

^{pr2}$

相关问题 更多 >

    热门问题