[Portugal] Postgresql

Filipe Brandao fgbrandao emepc-portugal.org
Terça-Feira, 10 de Julho de 2012 - 00:18:55 PDT


Mas isso eu já consigo sem problemas.
A questão é, como conseguir passar a função do primeiro script (que pus no email) e conseguir atribuir a uma variável o valor resultante do NEW.email...

Obrigado!

Sent from my iPhone

On 10/07/2012, at 07:46, Eloi Ribeiro <eloi.ribeiro  gmail.com> wrote:

> Em python podes-te ligar a PostgreSQL e realizar uma consulta:
> 
> -----------------------------------------
>     import psycopg2
>     import getpass
>     password = getpass.getpass('Senha: ')
>     conn = psycopg2.connect("dbname='nome_bd' user='utilizador' host='host' password='%s'" % password);
>     cur = conn.cursor()
>     cur.execute("SELECT campo1, campo2 FROM tabela WHERE campo = 'blah' ")
>     rows = cur.fetchall()
>     for row in rows:
>         campo1 = row[0]
>         campo2 = row[1]
>         print campo1, campo2
> -----------------------------------------
> 
> Espero que seja útil.
> Cumprimentos,
> 
> Eloi Ribeiro
> GIS Analyst
> 39,45º -0,40º
> flavors.me/eloiribeiro
> 
> 
> No dia 9 de Julho de 2012 23:55, Filipe Brandão <fgbrandao  emepc-portugal.org> escreveu:
> Boa noite.
> 
> Gostaria de saber se alguém me pode ajudar num problema que estou a tentar resolver.
> Cenário: Tenho uma BD com duas tabelas. A primeira só tem uma linha, que se pode editar (update) via user form. Cada vez que essa mesma linha é editada, é populada a 2ª tabela (com um trigger que dispara sempre que há um update na 1ª tabela), de modo incremental (insert). Deste modo tenho um historial de todas as interacções entre utilizadores e a 1ª tabela.
> Criei outro trigger para enviar emails aos users que interajam com a 1ª tabela (um dos campos que preenchem é um endereço de email), também depois de haver updates nessa mesma 1ª tabela. Este trigger dispara um script em python que faz esse mesmo envio.
> Preciso ainda que cada vez que haja um envio, este seja feito para o ultimo endereço a ser inserido na 2ª tabela (tenho um atributo com datatype serial, para saber sempre qual a ultima linha da tabela). Até aqui tudo ok.
> Agora o problema. Quando há um update na 1ª tabela os dois triggers disparam e correm, mas no caso do envio de emails é sempre enviado o email para o ultimo registo da tabela antes desse mesmo update!
> Ou seja, há uma transacção em curso e o trigger "não vê" o ultimo registo uma vez que ainda não foi feito um commit na BD, que só acontece depois de a transacção acabar.
> Já vi que não é possível disparar triggers depois de triggers, que não consigo fazer commit a meio de uma transacção, etc.
> Como poderei dar a volta a isto?
> Aquilo que me pareceu mais óbvio era aproveitar o primeiro trigger de que vos falei, uma vez que nele consigo ir buscar os novos valores da 1ª tabela (que depois são inseridos na 2ª). Mas não consegui programar o script em python para incluir essa mesma função.
> A função é basicamente isto, e funciona bem (ele saca o new.email para a 2ª tabela):
> CREATE OR REPLACE FUNCTION process_emp_audit() RETURNS TRIGGER AS $emp_audit$
>     BEGIN
> 
>         IF (TG_OP = 'UPDATE') THEN
>             INSERT INTO emp_audit SELECT 'D', now(), user, NEW.email;
>         END IF;
> 
>         RETURN NULL; -- result is ignored since this is an AFTER trigger
>     END;
> $emp_audit$ LANGUAGE plpgsql;
> 
> CREATE TRIGGER emp_audit
> AFTER UPDATE ON emp
>     FOR EACH ROW EXECUTE PROCEDURE process_emp_audit();
> A função em python já a tenho escrita e funciona bem (neste momento não tenho aqui o código).
> Precisava apenas de conseguir definir uma variável no python que me desse o valor do NEW.email, do género recipient = select NEW.email from emp;
> Alguma ideia de como ir sacar aquele new.email e usar como variável no script em python?
> 
> Obrigado a todos e espero ter-me feito entender...
> 
> Filipe
> 
> 
> _______________________________________________
> Portugal mailing list
> Portugal  lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/portugal
> 
> 
> _______________________________________________
> Portugal mailing list
> Portugal  lists.osgeo.org
> http://lists.osgeo.org/mailman/listinfo/portugal
-------------- próxima parte ----------
Um anexo em HTML foi limpo...
URL: <http://lists.osgeo.org/pipermail/portugal/attachments/20120710/b5f3c7e2/attachment-0001.html>


More information about the Portugal mailing list