Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Problema al insertar desde acces en mysql
#1
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
Responder
#2
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.
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#3
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 ?
Responder
#4
¿Cuál es el error que estás obteniendo?
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!

También ofrecemos consultoría profesional de desarrollo en Python para personas y empresas.
Responder
#5
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.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)