Я в самодельных билдерах запросов добавлял фейковый предикат 1=1 который всегда был. Тогда добавление новых предикатов делается проще. Вот как-то так.
def get_user(*, username: str = None, email: str = None, id: int = None, is_blocked: bool = None):
SQL = "SELECT * FROM USERS {} LIMIT %s OFFSET %s WHERE 1=1 "
more = []
if username:
more.append("AND username = '%s'" % username)
if email:
if any([username]):
more.append("AND email = '%s'" % email)
if id:
if any([username, email]):
more.append("AND id = '%s'" % id)
Я проверял этот код на валидность. Это лишь идея как сделать. Поэтому исправляй дальше сам.