docs: def migrate(self, conn):
          """Migrate a database as needed.
  
          This method is safe to call on an up-to-date database, on an old
          database, on a newer database, or an uninitialized database
          (version 0).
  
          This method is idempotent.
          """
          while self.should_migrate(conn):
              current_version = get_user_version(conn)
              migration = self._get_migration(current_version)
              assert migration.from_ver == current_version
              logger.info(f'Migrating database from {migration.from_ver}'
                          f' to {migration.to_ver}')
              self._migrate_single(conn, migration)
              set_user_version(conn, migration.to_ver)
              logger.info(f'Migrated database to {migration.to_ver}')