insertar archivo pdf en base de datos postgresql utilizando pypgsql

Ernesto Revilla erny en sicem.biz
Jue Jul 28 01:06:03 CEST 2005


Hola,

no expandas la instrucción sql con %s. Deja que pyPgSQL lo haga por ti:

archivo=file('liquidacion.pdf','rb').read()
archivo=PgSQL.PgBytea(archivo)
# !!!

cur.execute("""INSERT INTO historico_liquidacion
 (rut_trabajador, codigo_proceso, liquidacion_sueldo)
  VALUES (%s,%s,%s)""", arg1, arg2, archivo)

Erny







Milton inostroza escribió:

>hola:
>
>hace tiempo que quiero guardar archivos con extension pdf en mi base
>de datos y no he podido...pensé que habia encontrado la solucion
>cuando visité el blog de Chema Cortes
>http://ch3m4.org/blog/index.php/py?p=40&more=1&page=3 ...en realidad
>me resulta con los archivos jpg y en realidad con cualquier archivo
>que no tenga dentro de su formato las dobles cremilas (" "), viendo mi
>pdf lamentablemente tiene dobles cremillas y el motor de base de datos
>postgresql me tira un error... como puedo solucionar esto...chema o
>alguien me puede ayudar o guiar??.
>
>lo que hago es lo siguiente:
>
>archivo=file('liquidacion.pdf','rb').read()
>archivo=PgSQL.PgBytea(archivo)
>
>#aca imprime como se va el insert a la base de datos
>
>INSERT INTO historico_liquidacion
>                (rut_trabajador,
>                codigo_proceso, liquidacion_sueldo)
>                VALUES ('15.683.705-9',3,%PDF-1.3
>%ï¿¿ï¿¿ï¿¿ï¿¿ ReportLab Generated PDF document http://www.reportlab.com
>% 'BasicFonts': class PDFDictionary
>1 0 obj
>% The standard fonts dictionary
><< /F1 2 0 R
> /F2 4 0 R >>
>endobj
>% 'F1': class PDFType1Font
>2 0 obj
>% Font Helvetica
><< /BaseFont /Helvetica
> /Encoding /WinAnsiEncoding
> /Name /F1
> /Subtype /Type1
> /Type /Font >>
>endobj
>% 'FormXob.cef2d14ab870c54c970a864d4dc3155b': class PDFImageXObject
>3 0 obj
><< /BitsPerComponent 8
> /ColorSpace /DeviceRGB
> /Filter [ /ASCII85Decode
>  /DCTDecode ]
> /Height 32
> /Length 1534
> /Subtype /Image
> /Type /XObject
> /Width 73 >>
>stream
>s4IA0!"_al8O`[\!<E3O!@n-Ms5<qn7<iNY!!#_f!%IsK!!iQ)zs4[N@!!NH-"9\f1"9\i2"U,)8$j[(C#6tbI$OI4R%h]Ke%hTBe(*",('H.\u&JuZ.)BBh?+!2.4+s\?R,TIjI*rjsp6NI>o"U>5:%L<=M*Y]2#*Zc en D*Zc en D*Zc en D*Zc en D*Zc en D*Zc en D*Zc en D*Zc en D*Zc en D*Zc en D*Zc en D*Zc en D*Zk?s!"fJ:+94t8!?qLF&HMtG!WU(<)#sX<!s&B%zz!!!-+"U>;5s24ml&-)_5"9AT+"9Sr1z!!*-'"98T0&KqAl5qu4M'I#:I6X_3+;H7^fP+g;'_uLVT!<E3%!<<*"zz!!<?)!rp1=,S:"X!W`?+"TSN&z!!!!"!Ws#hi=ZeI,-`@iJ^Nueg&MN`!<<05!tbMt!7Em:=*f"ChgYaME`QRQ6Rd8a=`n6u>L>Tj+E'`:Yl(*/Qe:$*j&]@W4+!tV9?`reiTcR:+HL$WA_GPDM"YuBDQ.#]=e0HZ.5n"W2Bn_sNPoX\?\1Up"ELUUG'-CM=`S>Adq-#MPEh/%ZR[A%[dPWMWas4!p5T6MYhrhY_FaWf:Hk!IlE73Rc:a_bE/aB2aKqAbB,7_gKZE%q"Z4`.cM^:UP_%V=Uj$TYh_\tDEZEsCR6 en FR>_ZP#S/I+MbC3SG[k^UtBaR0rK4Q2oJiVk%nn8K1?!-Eoh+G;cE`K:Ubbe$N_2,K>q%2\R-:PpIXg43 en 8NL%j,s_'s^GITDn!u`.c;Qd[NojIJb!\p(.D3`m/@sRH]cf!*A>G7:oUY43NU6,&!qts7fe'LHQMkTjj%s0r[BcA:V[r=pJiN]Y`PlamZ3q en NXAobNO:%2c;Qh5C!(0^M6R,m?\Q2L8RsJAh)E,T5r-9.[]/\$OFrX/++=&Bt4eV:7M@/0da`*cQldPWi[*n en P+h5r@<g(:#jq#t>d!P&d<t9Y+.p2T!a^k3'id*gNQEErE?*F'>Gb--.YaCFSh/3JuL;<!2-[^+[-c`-e48bnXjt?Z6Jq)lOi4-]V>/o>'UV4S<^@Jg5X#uX\kF/$Ep.@!6F en M'5]$!o en G0=\K+(?8),^,tCVdDebV($P%qim`Y,l&h=J<>ZIZ6Mbpr\\;1Lh\Dsdc!)^_'`cdCJ!4BMOL]IT#_3t[Cu:20Oif9"NQ/@1gmaiidp&]"FW[OEd?SE9?&.!1)2[)I$I?@2(_QhD+40=g4emA5^3L2l_ju!E193H#+N*Td#\e=9s'K^@G3hg44gpdW5[fA3:s-*q);WIfP4':KS$+`4VG*u_cn$:4&Ga4i^JmD,2j0irPCljRUNC"./IcT*p1&"?4JoJO]q-!('ajuI!R%M5%-Z-"scSlOJDW/#QoYWkt<Sko=#].gOc7]mSI1EgjG\o:T?Xf\G"H4o\1(K`0[d"S^3_=:XYNC[=n<A7t<&^Y,ufhdsjRY&ToU*HN!P=>n>/EOP*mGcZ*i./V#\Se:Kcti"PtWUK/rODme?X4X'$/)I^_q.s4BXMUh-.b*A-KUteu_9&ekFS&t]`~>endstream
>
>endobj
>% 'F2': class PDFType1Font
>4 0 obj
>% Font Courier
><< /BaseFont /Courier
> /Encoding /WinAnsiEncoding
> /Name /F2
> /Subtype /Type1
> /Type /Font >>
>endobj
>% 'Page1': class PDFPage
>5 0 obj
>% Page dictionary
><< /Contents 9 0 R
> /MediaBox [ 0
>  0
>  612
>  792 ]
> /Parent 8 0 R
> /Resources << /Font 1 0 R
>  /ProcSet [ /PDF
>   /Text
>   /ImageB
>   /ImageC
>   /ImageI ]
>  /XObject << /FormXob.cef2d14ab870c54c970a864d4dc3155b 3 0 R >> >>
> /Rotate 0
> /Trans <<  >>
> /Type /Page >>
>endobj
>% 'R6': class PDFCatalog
>6 0 obj
>% Document Root
><< /Outlines 10 0 R
> /PageMode /UseNone
> /Pages 8 0 R
> /Type /Catalog >>
>endobj
>% 'R7': class PDFInfo
>7 0 obj
><< /Author (anonymous)
> /CreationDate (20050727121022)
> /Producer (ReportLab http://www.reportlab.com)
> /Subject (unspecified)
> /Title (untitled) >>
>endobj
>% 'R8': class PDFPages
>8 0 obj
>% page tree
><< /Count 1
> /Kids [ 5 0 R ]
> /Type /Pages >>
>endobj
>% 'R9': class PDFStream
>9 0 obj
>% page stream
><< /Filter [ /ASCII85Decode
>  /FlateDecode ]
> /Length 1951 >>
>stream
>GatU4>Ar4d'RiR35F_sZg9%g4\U0i*F%`J<VI6FS^,a2)>leiR<9jJZ4WY9@
>8W8Y/8;UjRS,(>ihmn[`;#FbqGI3*B!$?q((l.#UQm<;r0arYWM]L^8`!E?=
>5$p_DG&*;Tb8e>%84A2p6GOM(@>%K1chCHoYBp"dcdDR5="g0e'NVqqq=TA4
>)F)q-7p)ep05TW%6Fk1^qCkUPl[R>Q'#dXoa^k0[*#^7D\IK(.Q:ncI"B4Rt
>qJ!S7\_XRZj1oBk5(7MnhL=u:dul,5rcO<^@a%*AL-N_Rc\kZXl](fKoER'W
>%*!_q0*o9XnBS15FG"N<V2ec#_ok2Y),ZX/R_e+Cm;mOrT#VD,f#6Z&4$VH=
>d!aM`;+is&*=[@tMh5ZuOB`A-2+24,X_Eu en rO@jUi*eGPd(4RBm).<\Ag9,J
>7MC7mbkurRnEq*fnR1JoN en q;l;'QRIVS)V]/4`%oJ173ep4 en VZ<dB[&_N^ff
>?@05,Mq>=5`&/sE)n`&Mf3H2M'SIZ*-4$^_E?1TSefP%OGWa'c0_Sm4GZ[Yd
>3LN&\m*hC9l(ClWqbHmeI8*$V3GR!m/nbr`j!nKZ#R^MUgf9#^0gUIiVMpob
>imff<DRbU5*UdAR6bJ8b.HUgL'e:_&M&(].=6_Jm@&2X\8`RaW$_fYjTO5Il
>A%HNm\UYR;gE]24iT:]Si&gq)/hLH+SgsLQY0nmQP7TcW7So+FI$E,N.gg'9
>Wqi9t:mX^enqtdg2ehE]T1Sf0Xto%M<>#)I?8h<$#$qsa/U("Ma]8ar<$@2A
>VZ(,U*=o.Oi4<#\O en 9KQB%RHB`OmGDU/#ueb=Jd\Q:JFL<@Nr2Utf4YYhrLX
>m,[RIU_dp en 6`X+'QTT3'-qQ?O%+iTN$+It-8(ftC-'G0FPa4eLe:q996^6Pi
>"ainYI1iBA8`C`'?,Uj'eJpSf`6j^sbsV,br^?Y_Zc:Rb<!7C>D^\;jRS\F6
>&rSAEO]?7ZeXgF.(I?VQVc$XFV*qi1W>/Gi[Z2])A,`+liM5!Fbj'5BK^1=7
>S[(WSTqIG:eOICr*,fd.W<BJ9:>SP(]u=@lq"(SRoXrkjNu):3AmX*djRrIS
>'doMIW,PB=j`I\G6TGG`N?L2Y1K#83Ot!AL+kLD"b=!4g#MsD,c6$%Qi>JuG
>mmU'na<jJ%fl?/\P"^&rGTFX`>TK-<'T:$o*,"]/:b72:;A=j!m5TAIRE*VY
>m%h=>(N/q<=@]ZM"e_+`?ZNg_B[XEoN\1ZmOU(Vr\j^dLda_d4&$^uBnggF8
>EcGXKY2rdh2CYslrF>/jH-)RcO4]5'oOEr,?EG,==MRW,j?[lYpE?aON7Ja0
>'"Yt\ULGh9EBYu%*VpFf?8X+&kn^OC$e$:RDrM4no&EPO en QIV@a3/dW(;W_D
>^*HS_BPVDdVO2acZ!=9gU&WK1H1P3o"jdXnH?KHgkKSN9mm:8uSF<C\kX+IL
>?Iq83i/X[dWle)T\L)P(^=k\VZXYtL en 3CS*m<Om:*a en uneupB$`-)P1XEcZ`
>HK9/U3T_)hYqOsY0F&]48V$!MBsmCTbHmmq^+=sAC<YT:gh;*T22;j0=)Roj
>_]sY0YEb2,?=V\4>fun/gO?M;DiGNF`ekr en STffp]\Or232scU6O[=3>V8Vi
>P@\oTGt[C'k60BJ9<#9#9LkG'Y(l2?Fd:Ma@@c?HF!#<ff\pe_HO?Mu6gr]5
>*3mo%H)H[(Ls=5PX5q;EZSL2bP:/LH`Z&$6OO^pYO5oj0#k8;l(q5Pbc`'&k
>Up*EKc\MF3[n<^H-t`T en e"QX/+qg`A./pqVG7^TRA]=&'p^cd6Y?'Un"0;H,
>j5L)uCBMQdFX$9K^\=-cBL,>#-4[D[nRn;[4t\:#r`7"kas6O8MXPJ^i.KK<
>(75I en k0N:-"C>>^OFVN?IfsPQl2~>endstream
>
>endobj
>% 'R10': class PDFOutlines
>10 0 obj
><< /Count 0
> /Type /Outlines >>
>endobj
>xref
>0 11
>0000000000 65535 f
>0000000113 00000 n
>0000000221 00000 n
>0000000427 00000 n
>0000002198 00000 n
>0000002357 00000 n
>0000002702 00000 n
>0000002837 00000 n
>0000003033 00000 n
>0000003138 00000 n
>0000005236 00000 n
>trailer
><< /ID
>  % ReportLab generated PDF document -- digest (http://www.reportlab.com)
>  [(o\371\301\013\033\306P\335\315\302"\373\372\232M_)
>(o\371\301\013\033\306P\335\315\302"\373\372\232M_)]
>
> /Info 7 0 R
> /Root 6 0 R
> /Size 11 >>
>startxref
>5288
>%%EOF
>)
>
>despues del error, ejecute la misma instruccion por consola y
>definitivamente es problemas de las cremillas..ahora me pregunto sería
>incorrecto insertar todo esto como campo de tipo text??, igual tendría
>el problema de las doble cremillas??.
>
>salu2!!
>
>
>  
>




---
avast! Antivirus: Saliente mensaje limpio.
Base de datos de Virus (VPS): 0530-1, 26/07/2005
Comprobado en: 28/07/2005 1:06:04
avast! tiene los derechos reservados (c) 2000-2004 ALWIL Software.
http://www.avast.com




Más información sobre la lista de distribución Python-es