打印按组返回的SQLAlchemy对象并计数

时间:2020-07-06 12:49:50

标签: flask orm sqlalchemy

我有可以查询学生信息的表格,现在我想知道男女学生的人数。使用普通的SQL,我可以使用它

select student_gender, count(student_gender) from student_registration group by student_gender;

小搜索后,我发现SQLAlchemy具有以下等效性

gender = db.session.query(Student_Registration.student_gender, \
                        func.count(Student_Registration.student_gender))\
    .group_by(Student_Registration.student_gender).all()

现在我要打印所需的输出。使用

for b in gender:
    print(b.student_gender)

如何打印计数?我尝试了b.count但它显示了

Female <built-in method count of result object at 0x7fac60f21240>
Male <built-in method count of result object at 0x7fac60f21288>

2 个答案:

答案 0 :(得分:0)

您已经创建了查询,现在您必须执行查询并检索结果(是的,当我第一次启动时,它也使我感到困惑)。为此,请使用现有的并添加以下内容...

假设您尚未连接到数据库(实际上可能已经连接了-用正确的参数替换连接-数据库连接字符串,uid,pw ...)...

qry_engine = create_engine('mysql+pymysql://uid:pw@localhost:3306/charset=utf8mb4',
                           pool_recycle=3600, echo=False)

然后添加如下内容

rslt = qry_engine.execute(gender).fetchall()
for rslt_row in rslt:
    print(str(rslt_row))

我实际上并没有运行这些命令,因此我可能稍微弄糟了语法,但是解释器应该告诉您我在哪里出错了(请告诉我,我将修改答案)。希望对您有帮助!

答案 1 :(得分:0)

您可以使用label

gender = db.session.query(Student_Registration.student_gender, \
                        func.count(Student_Registration.student_gender).label('count'))\
    .group_by(Student_Registration.student_gender).all()

for b in gender:
    print(b.student_gender, b.count)