@classmethod
def get_dataset(cls, *, bind, strict, fallback=None):
    table = cls.__tablename__
    log.debug('read %r from %r', table, bind)
    try:
        (result,) = _backend.iterrows(sa.select(cls), mappings=True, bind=bind)
    except sa.exc.OperationalError as e:
        if ('no such table' in e.orig.args[0]):
            pass
        else:
            log.exception('error selecting %r', table)
            if strict:
                raise RuntimeError('failed to select %r from %r', table, bind) from e
        return fallback
    except ValueError as e:
        log.exception('error selecting %r', table)
        if (('not enough values to unpack' in e.args[0]) and (not strict)):
            return fallback
        else:
            raise RuntimeError('failed to select %r from %r', table, bind) from e
    except Exception as e:
        log.exception('error selecting %r', table)
        raise RuntimeError('failed to select %r from %r', table, bind) from e
    else:
        return result
@classmethod
def get_dataset(cls, *, bind, strict, fallback=None):
    table = cls.__tablename__
    log.debug('read %r from %r', table, bind)
    try:
        (result,) = _backend.iterrows(sa.select(cls), mappings=True, bind=bind)
    except sa.exc.OperationalError as e:
        if ('no such table' in e.orig.args[0]):
            pass
        else:
            log.exception('error selecting %r', table)
            if strict:
                raise RuntimeError('failed to select %r from %r', table, bind) from e
        return fallback
    except ValueError as e:
        log.exception('error selecting %r', table)
        if (('not enough values to unpack' in e.args[0]) and (not strict)):
            return fallback
        else:
            raise RuntimeError('failed to select %r from %r', table, bind) from e
    except Exception as e:
        log.exception('error selecting %r', table)
        raise RuntimeError('failed to select %r from %r', table, bind) from e
    else:
        return result