Foros Python
Problema al insertar desde acces en mysql - Versión para impresión

+- Foros Python (https://foro.recursospython.com)
+-- Foro: Desarrollo (https://foro.recursospython.com/forumdisplay.php?fid=1)
+--- Foro: General (https://foro.recursospython.com/forumdisplay.php?fid=9)
+--- Tema: Problema al insertar desde acces en mysql (/showthread.php?tid=68)



Problema al insertar desde acces en mysql - cucuru - 26-07-2017

Buenas tengo un problema pero no se cual es tengo esta funcion para interactuar con mysql:
  1. def run_query(ruta,salon,query=''):
  2.     datos = [ruta, Usuario, Password, salon]
  3.  
  4.     try:
  5.         conn = MySQLdb.connect(*datos) # Conectar a la base de datos
  6.         cursor = conn.cursor()         # Crear un cursor
  7.         cursor.execute(query)          # Ejecutar una consulta
  8.  
  9.         if query.upper().startswith('SELECT'):
  10.             data = cursor.fetchall()   # Traer los resultados de un select
  11.         else:
  12.             conn.commit()              # Hacer efectiva la escritura de datos
  13.             data = 0
  14.  
  15.         cursor.close()                 # Cerrar el cursor
  16.         conn.close()                   # Cerrar la conexión
  17.  
  18.         return data
  19.         
  20.     except :
  21.  
  22.         return "Error de conexion"


Conecto a una base de datos access y compongo con los datos la siguiente cadena a insertar en mysql:


Y me da error y no la inserta , sin embargo si copio esa cadena y se la paso a la funcion la inserta correctamente y no se porque de la otra forma no lo hace .

EL codigo para insertar es este :
  1. insertadatos="INSERT INTO `Tabla`(\
  2. `IdPremio`,`IdColor`,`Maximo`,`Minimo`,`InicioMinimo`,`InicioMaximo`,\
  3. `Porcentaje`,`Incrementos`,`Dureza`,`ComoPremios`,`Variabilidad`,`ValorInicial`,\
  4. `IdMaquina`,`ValorBolsa`,`AcumuladoBolsa`,`MaximoActual`,`CuandoMaximo`,`TotalJugadas`,\
  5. `CuandoPremio`,`FechaHora`,`Modulo`,`Posicion`,`EsSuperPremio`,`Control`,\
  6. `TopePremio`,`TJ`,`MJ`,`DJ`,`Opciones`,`IncrementoAdicional`,\
  7. `ProximoIncrementoAdicional`,`CantidadProximoIncrementoAdicional`,`CuandoMaximoTeorico`,\
  8. `DurezaMaxima`,`enviado`,`ModoOculto`,\
  9. `avisarAntesDe`,`Grupo`,`avisarEn`,`Pulsos`,`NombreCliente`,`DNICliente`,\
  10. `PremioClub`,`modificado`)\
  11. VALUES "
  12. datos=insertadatos
  13. while i < final:
  14.  
  15. iinsert="('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',\
  16. '%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',%s,%s,'%s','%s','%s','%s',%s,%s,%s,'%s') ,"\
  17. %(mydata[i][0],mydata[i][1],mydata[i][2],mydata[i][3],mydata[i][4],mydata[i][5],mydata[i][6],mydata[i][7],\
  18. mydata[i][8],mydata[i][9],mydata[i][10],arregla(mydata[i][11]),mydata[i][12],\
  19. arregla(mydata[i][13]),arregla(mydata[i][14]),arregla(mydata[i][15]),\
  20. mydata[i][16],mydata[i][17],elige(mydata[i][18]),mydata[i][19],mydata[i][20],mydata[i][21],mydata[i][22],\
  21. mydata[i][23],mydata[i][24],mydata[i][25],mydata[i][26],mydata[i][27],\
  22. mydata[i][28],mydata[i][29],mydata[i][30],\
  23. mydata[i][31],mydata[i][32],mydata[i][33],formatea(mydata[i][34]),\
  24. formatea(mydata[i][35]),mydata[i][36],mydata[i][37],\
  25. arregla(mydata[i][38]),mydata[i][39],formatea(mydata[i][40]),\
  26. formatea(mydata[i][41]),formatea(mydata[i][42]),mydata[i][43])
  27.  
  28. datos=datos+insert
  29.  
  30. insercion = run_query(ruta,salon,datos)


Me genera esta linea
INSERT INTO `Tabla`(            `IdPremio`,`IdColor`,`Maximo`,`Minimo`,`InicioMinimo`,`InicioMaximo`,            `Porcentaje`,`Incrementos`,`Dureza`,`ComoPremios`,`Variabilidad`,`ValorInicial`,            `IdMaquina`,`ValorBolsa`,`AcumuladoBolsa`,`MaximoActual`,`CuandoMaximo`,`TotalJugadas`,            `CuandoPremio`,`FechaHora`,`Modulo`,`Posicion`,`EsSuperPremio`,`Control`,            `TopePremio`,`TJ`,`MJ`,`DJ`,`Opciones`,`IncrementoAdicional`,            `ProximoIncrementoAdicional`,`CantidadProximoIncrementoAdicional`,`CuandoMaximoTeorico`,`DurezaMaxima`,`enviado`,`ModoOculto`,            `avisarAntesDe`,`Grupo`,`avisarEn`,`Pulsos`,`NombreCliente`,`DNICliente`,            `PremioClub`,`modificado`)             VALUES ('600','16','40','10','10','30','0.5','6','15','15','15','20.11','9','32.39','0.05','12694.29','0','7366.49','ŒŽ','2017-05-26 19:58:45',             '4','4','0','0','40','20','3','100','2','0','0','0','7298.48','0',NULL,-1,'1000','0','439.78','2265927',NULL,NULL,0,'2017-05-26 19:58:44') 

Pero no la inserta , si la imprimo y la copio y hago una llamada a run_query y le paso como un texto la misma cadena si que la inserta y llevo todo el dia loco con ello , porque de 500 registros me pasa lo mismo con 4 y no me da ninguna informacion de donde puede estar el error


RE: Problema al insertar desde acces en mysql - Francisco - 27-07-2017

Hola. El problema es que MySQLdb está lanzando una excepción y vos la estás ignorando. En general usar la cláusula try-except a secas es una mala práctica, siempre hay que especificar qué excepciones queremos capturar. Por ejemplo, si el código de tu función tiene un error de sintaxis, va a retornar "Error de conexion".

Empezá por remover la captura de excepciones y dejar que Python imprima el error que está devolviendo la consulta.


RE: Problema al insertar desde acces en mysql - cucuru - 27-07-2017

Ya he acotado el error , es al insertar 'ŒŽ' , no crea el registro , pero si cojo la misma sentencia y la pego en mysql inserta el registro sin mayor problema , alguna idea ?


RE: Problema al insertar desde acces en mysql - Francisco - 27-07-2017

¿Cuál es el error que estás obteniendo?


RE: Problema al insertar desde acces en mysql - cucuru - 27-07-2017

Ya lo he solucionado , era un problema de codificacion que por defecto estaba tomando latin-1 , lo he podido averiguar al capturar el error , muchas gracias.