您好,匿名用户
随意问技术百科期待您的加入

Flask-SQLAlchemy做分组统计的代码应该如何写?

0 投票

按班级统计所有学生获奖证书的总数。

Table:学生信息
学生姓名 班级 获奖证书数量
学生1 A2 1
学生1 A1 4
学生1 A2 4
学生1 A1 1
学生1 A1 5
学生1 A2 1

SELECT  班级,sum(获奖证书数量) FROM 学生信息 group by 班级

这么简单的一个查询语句,貌似放在SQLAlchemy挺麻烦的..
请问如何写呢应该?

另外.SQLAlchemy支不支持直接嵌入SQL查询执行,不用ORM方式?

用户头像 提问 2012年 12月1日 @ Karma 上等兵 (229 威望)
分享到:

1个回答

0 投票
 
最佳答案

sqlalchemy 自然是支持 sql 和 orm 两种方式了。
https://gist.github.com/4078848

#!/usr/bin/env python
#-*- coding: utf-8 -*-

from sqlalchemy import create_engine, Column, Integer, String, func
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker


Base = declarative_base()
class StudentInfo(Base):
    __tablename__ = 'stuinfo'
    id = Column(Integer, primary_key=True)
    name = Column(String)
    cls = Column(String)
    cert_count = Column(Integer)

    def __init__(self, name, cls, cert_count):
        self.name = name
        self.cls = cls
        self.cert_count = cert_count


engine = create_engine('sqlite:///:memory:', echo=True)
Base.metadata.create_all(engine)
Session = sessionmaker(engine)
session = Session()


data = [
    [u'学生1', u'A2', 1],
    [u'学生1', u'A1', 4],
    [u'学生1', u'A2', 4],
    [u'学生1', u'A1', 1],
    [u'学生1', u'A1', 5],
    [u'学生1', u'A2', 1]]
reocords = [StudentInfo(*record) for record in data]
session.add_all(reocords)
session.commit()

# sqlalchemy way
rs = session.query(StudentInfo.cls, func.sum(StudentInfo.cert_count)) \
        .group_by(StudentInfo.cls).all()

for row in rs:
    print row[0], row[1]

""" Output
A1 10
A2 6
"""

# sql way
sql = 'select cls, sum(cert_count) from stuinfo group by cls'
rs = engine.execute(sql) 

for row in rs:
    print row[0], row[1]

""" Output
A1 10
A2 6
"""
用户头像 回复 2012年 12月1日 @ Sagittarius 上等兵 (289 威望)
选中 2012年 12月1日 @Karma
提一个问题:

相关问题

0 投票
1 回复 49 阅读
+2 投票
1 回复 264 阅读
用户头像 提问 2012年 12月6日 @ Oracle 上等兵 (238 威望)
0 投票
1 回复 46 阅读
用户头像 提问 2012年 12月1日 @ Ryze 上等兵 (293 威望)
0 投票
1 回复 47 阅读
用户头像 提问 2012年 12月1日 @ Gemini 上等兵 (319 威望)
0 投票
1 回复 46 阅读
用户头像 提问 2012年 12月1日 @ Swain 上等兵 (232 威望)

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...