首页 文章

计算sqlite3数据库表列中出现的值的次数

提问于
浏览
0

我一直在执行一个查询来计算在我的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 回答

  • 0

    如果你可以将sqlite3模块与直接SQL一起使用,那么这是一个简单的查询:

    curs = con.execute("SELECT COUNT(*) FROM users WHERE country=?", ("Australia",))
    nb = curs.fetchone()[0]
    
  • 0

    问题是 country 是结果列表 tuples ,而不是字符串列表 . 最终结果是 str(each) 的值与 ('Australia',) 的行相似,这应该很明显为什么你将0的计数作为结果 .

    有关要提取单列值列表的信息,请参阅here . 如果需要不同的结果,请在SQL中使用 DISTINCT .

    但是,您不应该首先查询不同的国家/地区,然后触发查询来计算每个国家/地区的发生次数 . 而是使用 GROUP BY

    country_counts = db.session.query(Users.country, db.func.count()).\
        group_by(Users.country).\
        all()
    
    for country, count in country_counts:
        print(country, count)
    

    需要注意的主要事项是SQLAlchemy在使用ORM时不会隐藏SQL,但可以使用它 .

相关问题