Python - Enviar pdf a BD MySql Remota

   
Vista:

Enviar pdf a BD MySql Remota

Publicado por luclinux (26 intervenciones) el 09/08/2013 12:35:44
Muy buenas a todos:

Continuando con una duda anterior que expuse en el foro, ya he conseguido almacenar un documento pdf en la bd MySql y recuperarlo para mostrarlo con el visor de pdf predeterminado.

Mi problema ahora, es que la aplicación funciona correctamente en local, pero cuando hago la operación desde otro equipo, el pdf no se guarda correctamente. La conexión con la base de datos es correcta y si actualizo el resto de campos de las tablas, se actualizan bien. El problema es únicamente con el pdf.

El código que utilizo es el siguiente:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def btVerPDFClick(self, widget):
		informeConsultado = self.lbIdInforme.get_text()
		respt = self.selectorArchivos.run()
		self.selectorArchivos.hide()
		if respt == -5:
			pdfSeleccionado = open(self.selectorArchivos.get_filename())
			pdfBin = pdfSeleccionado.read()
			pdfSeleccionado.close()
 
			queryInsertarPDF = "UPDATE INFORMES SET PDF = %s WHERE IdInforme =\'" + informeConsultado + "'"
			c = conexion.db
			cursor = c.cursor()
 
			try:
				cursor.execute(queryInsertarPDF, (pdfBin, ))
				c.commit()
				self.msgbox.show()
				self.lbMensaje.set_text("PDF adjuntado con exito.")
				self.btAceptarMsgBox.set_label("Aceptar")
			except Exception, e:
				raise e
				c.rollback()
 
			cursor.close()
 
			self.selectorArchivos.hide()


Esto funciona correctamente en local, en Windows y Linux. Pero en remoto, en un equipo con Windows XP no funciona, pero tampoco aparecen fallos en la consola, incluso aparece el msgBox diciendo que se ha adjuntado con éxito.

Agradeceria cualquier ayuda o sugerencia.

Un saludo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Enviar pdf a BD MySql Remota

Publicado por luclinux (26 intervenciones) el 10/08/2013 17:20:22
Haciendo más pruebas he visto que tampoco funciona en local, en Windows, sólo en Linux.

Sigo investigando.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Enviar pdf a BD MySql Remota

Publicado por luclinux (26 intervenciones) el 10/08/2013 17:38:37
Por ahora he descubierto que el problema en Windows está aqui:

pdfSeleccionado = open(self.selectorArchivos.get_filename())
pdfBin = pdfSeleccionado.read()
pdfSeleccionado.close()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Enviar pdf a BD MySql Remota (SOLUCIONADO)

Publicado por luclinux (26 intervenciones) el 10/08/2013 17:56:49
Solucionado añadiendo el atributo 'rb' (leer en binario) al método open:

pdfSeleccionado = open(self.selectorArchivos.get_filename(), 'rb')
pdfBin = pdfSeleccionado.read()
pdfSeleccionado.close()
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Enviar pdf a BD MySql Remota (SOLUCIONADO)

Publicado por xve (1235 intervenciones) el 10/08/2013 18:00:03
Gracias por comentarlo...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de xve

Enviar pdf a BD MySql Remota

Publicado por xve (1235 intervenciones) el 10/08/2013 17:58:38
No se tendrá algo que ver, pero en tu consulta sql tienes una contrabarra que creo que no debería de estar... IdInforme=\...

1
"UPDATE INFORMES SET PDF = %s WHERE IdInforme =\'" + informeConsultado + "'"


Si puedes quitarla y probarlo....

Coméntanos, ok?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Enviar pdf a BD MySql Remota

Publicado por luclinux (26 intervenciones) el 10/08/2013 19:08:37
La contrabarra la pongo para que tome la comilla simple como parte de la consulta, en vez de comilla de apertura o cierre del código, ya que la variable informeConsultado es VarChar, no Int Fijate que después de informeConsultado, pongo la comilla de cierre.

Un saludo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar