def update_ranks(cls):
sql = """
UPDATE hive_accounts
SET rank = r.rnk
FROM (SELECT id, ROW_NUMBER() OVER (ORDER BY vote_weight DESC) as rnk FROM hive_accounts) r
WHERE hive_accounts.id = r.id AND rank != r.rnk;
"""
query(sql)
return
# the following method is 10-20x slower
id_weight = query_all("SELECT id, vote_weight FROM hive_accounts")
id_weight = sorted(id_weight, key=lambda el: el[1], reverse=True)
print("Updating account ranks...")
lap_0 = time.perf_counter()
query("START TRANSACTION")
for (i, (_id, _)) in enumerate(id_weight):
query("UPDATE hive_accounts SET rank=%d WHERE id=%d" % (i+1, _id))
query("COMMIT")
lap_1 = time.perf_counter()
print("Updated %d ranks in %ds" % (len(id_weight), lap_1 - lap_0))
评论列表
文章目录