title: Neo4j py2neo merge
body: <p>I have some questions on how to leverage graph.merge() in py2neo.
  I am trying to search in Neo4j to find if there is an existed account_node and link it with payment_change_event.</p>
  
  <pre><code>        account_node = graph.find_one('Payment_account', property_key="payment_account_id", property_value=payment_account_id)
          if not account_node:
              account_node = Node('Payment_account', payment_account_id=payment_account_id,\
                  email=email, bank_name=bank_name, account_number=account_number
          changed_to_edge = Relationship(payment_change_event_node, 'CHANGED_TO', account_node)
          graph.create(changed_to_edge)
  </code></pre>
  
  <p>I am thinking of changing the logic to use graph.merge() like below instead of using find_one() and update the graph.</p>
  
  <pre><code>            account_node = Node('Payment_account', payment_account_id=new_payment_account_id)
              graph.merge(account_node)
              account_node['email'], account_node['bank_name'] = email, bank_name
              account_node['account_numner'] = account_number
              graph.push(account_node)
              changed_to_edge = Relationship(payment_change_event_node, 'CHANGED_TO', account_node)
              graph.create(changed_to_edge)
  </code></pre>
  
  <p>However, my question is by doing the above I will need to rewrite all the nodes all the time.</p>
  
  <p>Is there any way for py2neo that can merge all the properties(even for non-constraint property)</p>
  
  <p>Let's say account_node has payment_account_id as the constraint property and email, bank_name and account_number are non-constraint properties.</p>
  
  <p>Now I already have had this account_node in the neo4j.</p>
  
  <p>account_node: payment_account_id='123', email='abc@abc.com', bank_name='mybank', account_number='123456'</p>
  
  <p>Then I want to run the process to change it to check if this node is changed. If some non-constraint properties changed I want update them.</p>
  
  <p>If not I don't want to touch it but just link it to a payment_change_event_node.</p>
  
  <p>I try to do </p>
  
  <pre><code>Node('Payment_account', payment_account_id=payment_account_id, email=email, bank_name=bank_name, account_number=account_number)
  </code></pre>
  
  <p>But it will complain on the merge().</p>
  
  <pre><code>File "test_graph.py", line 159, in main
      graph.merge(account_node)
  
  py2neo.database.status.ConstraintError: Node(443971) already exists with label `Payment_account` and property `payment_account_id` = 'xxxxxxxxxxxxxxx'
  </code></pre>
  
  <p>Any efficient way to achieve that in py2neo?
  Is there any way like this? I hope there is a function only merges on constraint properties and update the changed non-constraint properties.</p>
  
  <pre><code>account_node = Node('Payment_account', payment_account_id=payment_account_id, email=email, bank_name=bank_name, account_number=account_number)
  graph.merge(account_node)
  graph.push(account_node)
  changed_to_edge = Relationship(payment_change_event_node, 'CHANGED_TO', account_node)
  graph.create(changed_to_edge)
  </code></pre>