Foros Python

Versión completa: Problema al insertar desde acces en mysql
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
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
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.
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 ?
¿Cuál es el error que estás obteniendo?
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.