One possible issue (I'm not 100% sure), is if the Id is actually an integer in this python statement:
id = patient[0]
and some cypher, later you have this statement which looks like you're assigning an integer:
SET p.id = {id}
Then this MATCH will fail because it's explicitly a string:
MATCH (p:Patient {{id: "{Id}"}})
and a string isn't going to match an integer.