Python 计算值在sqlite3数据库表列中出现的次数
我一直在执行一个查询,以计算在sqlite3数据库表(Users)中,“country”列中出现值“Australia”的次数 我需要以一种更加动态的方式来处理本栏中的任何国家/地区值 我尝试了以下方法,但不幸的是,对于在循环变量(每个)中传递的所有值,我只能得到0计数Python 计算值在sqlite3数据库表列中出现的次数,python,sqlite,sqlalchemy,flask-sqlalchemy,Python,Sqlite,Sqlalchemy,Flask Sqlalchemy,我一直在执行一个查询,以计算在sqlite3数据库表(Users)中,“country”列中出现值“Australia”的次数 我需要以一种更加动态的方式来处理本栏中的任何国家/地区值 我尝试了以下方法,但不幸的是,对于在循环变量(每个)中传递的所有值,我只能得到0计数 非常感谢您的帮助。问题在于国家是一个结果元组列表,而不是字符串列表。最终的结果是str(each)的值与('Australia',)类似,这应该可以清楚地说明为什么结果是0 有关要提取单列值列表的信息,请参见。如果需要不同的结果
非常感谢您的帮助。问题在于
国家
是一个结果元组列表,而不是字符串列表。最终的结果是str(each)
的值与('Australia',)
类似,这应该可以清楚地说明为什么结果是0
有关要提取单列值列表的信息,请参见。如果需要不同的结果,请在SQL中使用distinct
但是,您不应该首先查询不同的国家,然后启动一个查询来计算每个国家的发生率。改为使用分组依据
:
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模块与direct SQL一起使用,则这是一个简单的查询:
curs = con.execute("SELECT COUNT(*) FROM users WHERE country=?", ("Australia",))
nb = curs.fetchone()[0]
非常感谢,这项工作做得非常完美,反应非常快。谢谢!是否还要按计数对该查询进行排序?我自己发现,这其实很简单:country\u counts=db.session.query(User.country,db.func.count())。group\u by(User.country)。order\u by(db.func.count().desc())。all()
country_counts = db.session.query(Users.country, db.func.count()).\
group_by(Users.country).\
all()
for country, count in country_counts:
print(country, count)
curs = con.execute("SELECT COUNT(*) FROM users WHERE country=?", ("Australia",))
nb = curs.fetchone()[0]