How to unlink a node with python?
The my_node.inputs[0] is a node Socket type, and the my_node.inputs[0].links is a read only list of links from this socket, so your first attempt won't work, and you have found the correct way, which is deleting the link from node_tree.links as follows:

 # remove only the desired link
 l = my_node.outputs[0].links[0]
 node_tree.links.remove(l)


To find a link:

output = my_node1.outputs[0]
input  = my_node2.inputs[0]

for l in output.links :
    if l.to_socket == input :
       node_tree.remove(l)


Also you can check for the connected node: if l.to_node == my_node2:

See the DOC page for more details.