Python: cómo emitir una inserción de SQL en una declaración con 'en va

Python: cómo emitir una inserción de SQL en una declaración con 'en valor

Estoy transfiriendo datos de MySQL a MSSQL; sin embargo, tengo un problema con la inserción en la declaración cuando tengo ' en valor.

para exportar he usado el siguiente código:

import pymssql
import mysql.connector

conn = pymssql.connect(host='XXX', user='XXX', 
password='XXX', database='XXX')
sqlcursor = conn.cursor()


cnx = mysql.connector.connect(user='root',password='XXX', 
database='XXX')
cursor = cnx.cursor()
sql= "SELECT Max(ID) FROM XXX;"
cursor.execute(sql)
row=cursor.fetchall()

maxID = str(row)
maxID = maxID.replace("[(", "")
maxID = maxID.replace(",)]", "")

AMAX = int(maxID)

LC = 1
while LC <= AMAX:
  LCC = str(LC)
  sql= "SELECT * FROM XX where ID ='"+ LCC +"'"
  cursor.execute(sql)
  result = cursor.fetchall()

  data = str(result)
  data = data.replace("[(","")
  data = data.replace(")]","")
  data = data.replace("None","NULL")
  #print(row)
  si = "insert into [XXX].[dbo].[XXX] select " + data 
  #print(si)
  #sys.exit("stop") 
  try:    
      sqlcursor.execute(si)
      conn.commit()
  except Exception:   
      print("-----------------------")
      print(si)
  LC = LC + 1
print('Import done | total count:', LC)

Funciona bien hasta que tengo ' en uno de mis valores:

'N', '0000000000', **"test string'S nice company"**

Me gustaría evitar escupir los datos en columnas y luego verificar si hay ' en los datos, ya que mi tabla tiene alrededor de 500 campos.

¿Existe una forma inteligente de reemplazar ' por ''?

Respuesta:

Se agregó SET QUOTED_IDENTIFIER OFF para insertar declaración:

si = "SET QUOTED_IDENTIFIER OFF insert into [TechAdv].[dbo].[aem_data_copy] 
select " + data 
Mostrar la mejor respuesta

Se está abriendo a los ataques de inyección SQL utilizando esta técnica.

En MSSQL, puede SET QUOTED_IDENTIFIER OFF, luego puede usar comillas dobles para escapar de una comilla simple, o usar dos comillas simples para escapar de una comilla.

bueno, creo que está funcionando cuando copio la fila a SQL, sin embargo, Python todavía está lanzando una excepción.

dos comillas simples para escapar de una comilla es la forma ANSI SQL.

¡Se agregó SET QUOTED_IDENTIFIER OFF a mi declaración de inserción y funciona bien! Gracias