[英]count how many times in an sqlite3 database table column the values occurs
我一直在執行查詢以計算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())
任何幫助將不勝感激。
問題是country
是結果元組的列表,而不是字符串的列表。 最終結果是, str(each)
的值與('Australia',)
相似,這應該很清楚為什么您得到的計數為0。
有關何時要提取單列值列表的信息,請參見此處 。 如果需要不同的結果,請在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,但可以使用它。
如果可以將sqlite3模塊與直接SQL一起使用,這是一個簡單的查詢:
curs = con.execute("SELECT COUNT(*) FROM users WHERE country=?", ("Australia",))
nb = curs.fetchone()[0]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.