[Portugal] Postgresql

Eloi Ribeiro eloi.ribeiro gmail.com
Segunda-Feira, 9 de Julho de 2012 - 23:46:25 PDT


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
>
>
-------------- próxima parte ----------
Um anexo em HTML foi limpo...
URL: <http://lists.osgeo.org/pipermail/portugal/attachments/20120710/ee18e8d7/attachment.html>


More information about the Portugal mailing list