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

时间:2018-12-10 11:09:13

标签: python sqlite sqlalchemy flask-sqlalchemy

我一直在执行查询以计算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 :(得分:0)

问题在于country是结果元组的列表,而不是字符串列表。最终结果是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,但可以使用它。

答案 1 :(得分:0)

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

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