/
bear
/
opencorpora
Обзор
Документация
Войти
/
bear
/
opencorpora
Код
Запросы
0
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
scripts/update_user_rating.py
54 строки
2 KB
Dmitry Granovsky
python -> python2
26 авг 2023, 15:38
26 авг 2023, 15:38
2161eda
Код
Авторство
О чём код?
#!/usr/bin/env python2 import sys import time import json import MySQLdb from MySQLdb.cursors import DictCursor def update_rating(dbh, weights): dbh.execute("UPDATE users SET user_rating10 = 0") dbh.execute(""" SELECT user_id, SUM( CASE complexity WHEN 0 THEN {0} WHEN 1 THEN {1} WHEN 2 THEN {2} WHEN 3 THEN {3} WHEN 4 THEN {4} END ) AS rating FROM users LEFT JOIN morph_annot_instances USING(user_id) LEFT JOIN morph_annot_samples USING(sample_id) LEFT JOIN morph_annot_pools p USING(pool_id) LEFT JOIN morph_annot_pool_types t ON (p.pool_type = t.type_id) GROUP BY user_id ORDER BY rating DESC """.format(*weights)) users = dbh.fetchall() for user in users: if user['rating'] > 0: dbh.execute("UPDATE users SET user_rating10 = {0} WHERE user_id = {1} LIMIT 1".format(int(user['rating']), user['user_id'])) def main(): with open(sys.argv[1]) as fconf: config = json.load(fconf) hostname = config['mysql']['host'] dbname = config['mysql']['dbname'] username = config['mysql']['user'] password = config['mysql']['passwd'] weights = config['misc']['morph_annot_rating_weights'] assert len(weights) == 5 db = MySQLdb.connect(hostname, username, password, dbname, use_unicode=True, charset="utf8") dbh = db.cursor(DictCursor) dbh.execute('START TRANSACTION') update_rating(dbh, weights) db.commit() if __name__ == "__main__": main()