подсчитать, сколько раз в столбце таблицы базы данных sqlite3 встречаются значения - PullRequest
0 голосов
/ 10 декабря 2018

Я выполняю запрос, чтобы подсчитать, сколько раз в моей таблице базы данных sqlite3 (Пользователи) в столбце "страна" встречается значение "Австралия".

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 голосов
/ 10 декабря 2018

Если вы можете использовать модуль sqlite3 с прямым SQL, это простой запрос:

curs = con.execute("SELECT COUNT(*) FROM users WHERE country=?", ("Australia",))
nb = curs.fetchone()[0]
0 голосов
/ 10 декабря 2018

Проблема в том, что country - это список результатов кортежей , а не список строк.Конечным результатом является то, что значение str(each) является чем-то похожим на ('Australia',), что должно сделать очевидным, почему вы получаете счет 0 в качестве результата.

Когда вы хотите извлечь списокзначений одного столбца см. здесь .Если вам нужны разные результаты, используйте DISTINCT в SQL.

Но вы не должны сначала запрашивать разные страны, а затем запускать запрос, чтобы подсчитать вхождение каждой из них.Вместо этого используйте 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 не скрывает SQL при использовании ORM, а работает с ним.

...