Importing FBX with camera & target placeholders
The following is an example script that worked for me.  I first (manually) created a collection named &quot;cameras&quot; and moved all the Empties into that collection.  I skip any existing cameras in case I run the script more than once.
import bpy

for obj in bpy.data.objects:
    hasACamera = False
    if ( (&quot;Camera&quot; in obj.name) and (&quot;Target&quot; not in obj.name) and (obj.type != 'CAMERA') ):
        for child in obj.children:
            if (child.type == 'CAMERA'):
                hasACamera = True
        if ( hasACamera is True ):
            print( obj.name + &quot;: already has a camera&quot;)
            continue
        print( obj )
        print( obj.type )
        bpy.ops.object.camera_add()
        bpy.context.object.name = obj.name + &quot;.Camera&quot;
        print( bpy.context.object )
        print( bpy.context.active_object )
        sel = bpy.data.objects[bpy.context.object.name]
        print( sel.name + &quot; align&quot;  )
        bpy.ops.transform.transform(mode='ALIGN', value=(0, 0, 0, 0), orient_type='GLOBAL',
         orient_matrix=((1, 0, 0), (0, 1, 0), (0, 0, 1)), orient_matrix_type='GLOBAL', mirror=True, use_proportional_edit=False,
         proportional_edit_falloff='SMOOTH', proportional_size=1, use_proportional_connected=False, use_proportional_projected=False)
        sel.parent = obj
        bpy.ops.object.collection_link(collection='cameras')
    if ( (obj.type == 'CAMERA') and (&quot;.Camera&quot; in obj.name) ):
        targetName = obj.name[0:-7] + &quot;.Target&quot;
        try:
            targetObj = bpy.data.objects[targetName]
            if obj.constraints[&quot;Track To&quot;] is None:
                print( &quot;adding Track To constraint&quot; )
                obj.constraints.new(type='TRACK_TO')
                obj.constraints[&quot;Track To&quot;].target = targetObj
        except:
            print()
```