title: upsert into Postgres dealing with quotations
body: <p>I'm trying to write a function that upserts a list of dicts into postgres, but I'm having difficulty dealing with quotation marks.  </p>
  
  <p>I have the two functions below, one to generate the insert statement and one to execute.</p>
  
  <pre><code>import psycopg2 as pg
  import string
  
  def create_insert_sql(record, table, on_key):
      """creates the sql insert statement"""
  
      columns = list(record.keys())
      insert_columns = ','.join([str(x) for x in columns])
      columns.remove(on_key)
      update_set = ','.join([str(x) for x in columns])
      exclude_set = ','.join(['EXCLUDED.' + str(x) for x in columns])
  
      values = ','.join(['\'' + str(x) + '\'' for x in record.values()])
  
      insert_sql_statement = """
     INSERT INTO {} ({})
          VALUES ({})
          ON CONFLICT ({})
          DO UPDATE SET
              ({})
              = ({}) ;
      """.format(table, insert_columns, values, on_key, update_set, exclude_set)
  
      return insert_sql_statement
  
  def upsert_into_pg(dataset, table, on_key):
      """Given a list of dicts, upserts them into a table with on_key as conflict"""
  
      conn = pg.connect(user=XXXX,
                        password=XXXX,
                        host='127.0.0.1',
                        port=3306,
                        database='XXXX')
  
      cur = conn.cursor()
  
      try:
          for record in dataset:
              cur.execute(create_insert_sql(record, table, on_key))
      except Exception as e:
          conn.rollback()
          print(e)
      else:
          conn.commit()
          print('upsert success')
      finally:
          cur.close()
          conn.close()
  </code></pre>
  
  <p>An example of the error</p>
  
  <pre><code>test = [
      {'a': 'structure', 'b': 'l\'iv,id', 'c': 'doll', 'd': '42'},
      {'a': '1', 'b': 'shoe', 'c': 'broke', 'd': '42'},
      {'a': 'abc', 'b': 'proc', 'c': 'moe', 'd': '42'}
  ]
  
  upsert_into_pg(test, 'testing', 'a')
  </code></pre>
  
  <p>Returning</p>
  
  <pre><code>syntax error at or near "iv"
  LINE 3:         VALUES ('structure','l'iv,id','doll','42')
  </code></pre>
  
  <p>Any help is greatly appreciated.  </p>