diff options
| -rw-r--r-- | metricity/exts/event_listeners/guild_listeners.py | 17 | 
1 files changed, 13 insertions, 4 deletions
diff --git a/metricity/exts/event_listeners/guild_listeners.py b/metricity/exts/event_listeners/guild_listeners.py index 9ad0bda..0d26ba7 100644 --- a/metricity/exts/event_listeners/guild_listeners.py +++ b/metricity/exts/event_listeners/guild_listeners.py @@ -3,7 +3,7 @@  import discord  from discord.ext import commands  from pydis_core.utils import logging, scheduling -from sqlalchemy import update +from sqlalchemy import column, update  from sqlalchemy.dialects.postgresql import insert  from metricity import models @@ -56,11 +56,12 @@ class GuildListeners(commands.Cog):          log.info("Performing bulk upsert of %d rows", len(users))          user_chunks = discord.utils.as_chunks(users, 500) +        created = 0 +        updated = 0          async with async_session() as sess:              for chunk in user_chunks: -                log.info("Upserting chunk of %d", len(chunk)) -                qs = insert(models.User).values(chunk) +                qs = insert(models.User).returning(column("xmax")).values(chunk)                  update_cols = [                      "name", @@ -74,11 +75,19 @@ class GuildListeners(commands.Cog):                      "pending",                  ] -                await sess.execute(qs.on_conflict_do_update( +                res = await sess.execute(qs.on_conflict_do_update(                      index_elements=[models.User.id],                      set_={k: getattr(qs.excluded, k) for k in update_cols},                  )) +                objs = list(res) + +                created += [obj[0] == 0 for obj in objs].count(True) +                updated += [obj[0] != 0 for obj in objs].count(True) + +                log.info("User upsert: inserted %d rows, updated %d rows, total %d rows", +                         created, updated, created + updated) +              await sess.commit()          log.info("User upsert complete")  |