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:
Código:
def run_query(ruta,salon,query=''):
    datos = [ruta, Usuario, Password, salon]

    try:
        conn = MySQLdb.connect(*datos) # Conectar a la base de datos
        cursor = conn.cursor()         # Crear un cursor
        cursor.execute(query)          # Ejecutar una consulta

        if query.upper().startswith('SELECT'):
            data = cursor.fetchall()   # Traer los resultados de un select
        else:
            conn.commit()              # Hacer efectiva la escritura de datos
            data = 0

        cursor.close()                 # Cerrar el cursor
        conn.close()                   # Cerrar la conexión

        return data
        
    except :

        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 :
Código:
insertadatos="INSERT INTO `Tabla`(\n            `IdPremio`,`IdColor`,`Maximo`,`Minimo`,`InicioMinimo`,`InicioMaximo`,\n            `Porcentaje`,`Incrementos`,`Dureza`,`ComoPremios`,`Variabilidad`,`ValorInicial`,\n            `IdMaquina`,`ValorBolsa`,`AcumuladoBolsa`,`MaximoActual`,`CuandoMaximo`,`TotalJugadas`,\n            `CuandoPremio`,`FechaHora`,`Modulo`,`Posicion`,`EsSuperPremio`,`Control`,\n            `TopePremio`,`TJ`,`MJ`,`DJ`,`Opciones`,`IncrementoAdicional`,\n            `ProximoIncrementoAdicional`,`CantidadProximoIncrementoAdicional`,`CuandoMaximoTeorico`,\n            `DurezaMaxima`,`enviado`,`ModoOculto`,\n            `avisarAntesDe`,`Grupo`,`avisarEn`,`Pulsos`,`NombreCliente`,`DNICliente`,\n            `PremioClub`,`modificado`)\n             VALUES "
datos=insertadatos
while i < final:

iinsert="('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',\n             '%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s',%s,%s,'%s','%s','%s','%s',%s,%s,%s,'%s') ,"\n             %(mydata[i][0],mydata[i][1],mydata[i][2],mydata[i][3],mydata[i][4],mydata[i][5],mydata[i][6],mydata[i][7],\n               mydata[i][8],mydata[i][9],mydata[i][10],arregla(mydata[i][11]),mydata[i][12],\n               arregla(mydata[i][13]),arregla(mydata[i][14]),arregla(mydata[i][15]),\n               mydata[i][16],mydata[i][17],elige(mydata[i][18]),mydata[i][19],mydata[i][20],mydata[i][21],mydata[i][22],\n               mydata[i][23],mydata[i][24],mydata[i][25],mydata[i][26],mydata[i][27],\n               mydata[i][28],mydata[i][29],mydata[i][30],\n               mydata[i][31],mydata[i][32],mydata[i][33],formatea(mydata[i][34]),\n               formatea(mydata[i][35]),mydata[i][36],mydata[i][37],\n               arregla(mydata[i][38]),mydata[i][39],formatea(mydata[i][40]),\n               formatea(mydata[i][41]),formatea(mydata[i][42]),mydata[i][43])
    
    datos=datos+insert

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.