我一直在执行一个查询来计算在我的sqlite3数据库表(用户)中,在“country”列中,发生了多少次“Australia” .
australia = db.session.query(Users.country).filter_by(country="Australia").count()
我需要以更动态的方式为此列中的任何国家/地区值执行此操作 .
我尝试了以下但不幸的是,我只得到循环变量(每个)中传递的所有值的计数为0 .
country = list(db.session.query(Users.country))
country_dict = list(set(country))
for each in country_dict:
print(db.session.query(Users.country).filter_by(country=(str(each))).count())
任何帮助将不胜感激 .
2 回答
如果你可以将sqlite3模块与直接SQL一起使用,那么这是一个简单的查询:
问题是
country
是结果列表 tuples ,而不是字符串列表 . 最终结果是str(each)
的值与('Australia',)
的行相似,这应该很明显为什么你将0的计数作为结果 .有关要提取单列值列表的信息,请参阅here . 如果需要不同的结果,请在SQL中使用
DISTINCT
.但是,您不应该首先查询不同的国家/地区,然后触发查询来计算每个国家/地区的发生次数 . 而是使用
GROUP BY
:需要注意的主要事项是SQLAlchemy在使用ORM时不会隐藏SQL,但可以使用它 .