Olá a todos,

Estou desenvolvendo um script para pegar um arquivo, conectar ao
postgresql e e fazer um copy to ou um copy from em uma tabela ,  pois
no Zope o ZPsycopgDA não suporta COPY TO(suportar suporta, mas tem que
passar o caminho absoluto do arquivo no sistema de arquivos...).

Assim criei um script para conectar ao postgre com o psycopg e inserir
arquivos csv nas tabelas ou pegá-las tabela usando External Method.

Aqui vai o código que eu fiz:
------------------------------------------------------------------------------------------------------------------------------------
import tempfile, psycopg


def copy_from2Zope(table, connection_string):
        db=psycopg.connect(connection_string)
        arqtmp=tempfile.NamedTemporaryFile()
        cur=db.cursor()
        cur.copy_to(arqtmp, table, ',', '')
        arqtmp.seek(0)
        s=''
        for line in arqtmp:
                s=s+line
        arqtmp.close()
        cur.close()
        db.close()
        return (table+'.tbl',s)

def getZipFile(lista):
        import zipfile
        arq=tempfile.NamedTemporaryFile()
        zip=zipfile.ZipFile(arq,"w")
        for f in lista:
                zip.writestr(f[0],f[1])
        zip.close()
        arq.seek(0)
        z=''
        for line in arq:
                z=z+line
        arq.close()
        return z

def TBL2CSV(tbl):
        tbl=tbl.split("\n")
        del tbl[0]
        return '\n'.join(tbl)

def copy_to2Zope(table,connection_string,tbl):
        db=psycopg.connect(connection_string)
        arqtmp=tempfile.NamedTemporaryFile(mode='r+w')
        csv=TBL2CSV(tbl)
        arqtmp.write(csv)
        cur=db.cursor()
        arqtmp.seek(0)
        cur.copy_from(arqtmp,table,',','')
        cur.close()
        db.close()
        arqtmp.close()

------------------------------------------------------------------------------------------------------------------------------------
Tanto o COPY TO como o COPY FROM  do cursor funcionaram.o COPY FROM
funciona perfeitamente.O COPY TO também está funcionando, inclusive
apresenta erros quando há duplicidade nas chaves primárias mas não
está inserindo na tabela. Aparentemente tudo normal, mas as
informações não são inseridas na tabela.
Com um mesmo arquivo que tentei usar com o script, eu usei com o
cliente psql e dei uma instrução sql COPY TO com o mesmo arquivo e
funcionou!

Estou usando psycopg 2.0b3 e Zope 2.7.4-0, python 2.4.0, Mandrakelinux 10.2 .
Desculpe se estou sendo meio off-topic, mas já não sei aonde é o problema.
Peço a ajuda de vocês.Qualquer ajuda ou sugestão ou idéia,etc. é
benvinda(é assim que se escreve?).
--
-----------------------------------
Diego Manhães Pinheiro
Linux User #375020


Para enviar uma mensagem: zope-pt@yahoogrupos.com.br
Para desistir envie uma mensagem em branco para: [EMAIL PROTECTED] 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/zope-pt/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 



Responder a