само по себе опционально и решит всё за меня. Я бы сразу написал полный запрос, со всеми возможными параметрами, и передавал аргументы, а postgres сам бы все порешал остальное.... AND (column = {parameter} OR {parameter} IS NULL) ..
SQL = "SELECT * FROM users WHERE (username=%s OR %s IS NULL) AND(id=%s OR %s IS NULL) ... LIMIT 10 OFFSET 10 "
cursor.execute(SQL, [username, username, id, id, ...,...])