我一直在执行查询以计算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())
任何帮助将不胜感激。
答案 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]