Referential integrity isn't being violated here - SA is nulling the foreign key before deleting the row it points to. Try adding nullable=False to the declaration of attivita.cod_specie. That should make it fail in the way you expect, because SA will no longer be able to null the foreign key.
On 2/16/07, Jose Soares <[EMAIL PROTECTED]> wrote: > > > Hi all, > > I wonder how SA could delete a row of my table (postgresql) linked with > another table. > Take a look... > > pg=> select * from attivita where cod_specie='33'; > codice | descrizione | cod_specie > > --------+-----------------------------------------------------+------------ > 21311 | Sezionamento selvaggina allevata | 33 > > pg=> select * from specie where codice='33'; > > codice | descrizione > -------+------------- > 33 | Selvaggina > (1 row) > > sfera=> delete from specie where codice='33'; > ERROR: update or delete on "specie" violates foreign key constraint > "attivita_cod_specie_fkey" on "attivita" > DETAIL: Key (codice)=(33) is still referenced from table "attivita". > > -------------------------- > let's try now using SA: > > tg-admin shell > > In [1] aa=Specie.get_by(codice='33') > > In [3]: aa.delete > Out[3]: <bound method Specie.do of <Specie 33>> > > In [4]: aa.delete() > > In [5]: aa.flush() > 2007-02-16 15:30:31,955 sqlalchemy.engine.base.Engine.0x..f4 INFO BEGIN > 2007-02-16 15:30:31,958 sqlalchemy.engine.base.Engine.0x..f4 INFO SELECT > attivita.cod_specie AS attivita_cod_specie, attivita.attivo AS > attivita_attivo, attivita.cod_attivita_istat AS > attivita_cod_attivita_istat, attivita.descrizione AS > attivita_descrizione, attivita.cod_prodotto AS attivita_cod_prodotto, > attivita.cod_tipologia_struttura AS attivita_cod_tipologia_s_2e27, > attivita.cod_organizzazione AS attivita_cod_organizzazione, > attivita.cod_orientamento_produttivo AS attivita_cod_orientament_583a, > attivita.codice AS attivita_codice > FROM attivita > WHERE %(lazy_b4ba)s = attivita.cod_specie ORDER BY attivita.codice > 2007-02-16 15:30:31,958 sqlalchemy.engine.base.Engine.0x..f4 INFO > {'lazy_b4ba': '33'} > 2007-02-16 15:30:31,979 sqlalchemy.engine.base.Engine.0x..f4 INFO UPDATE > attivita SET cod_specie=%(cod_specie)s WHERE attivita.codice = > %(attivita_codice)s > 2007-02-16 15:30:31,980 sqlalchemy.engine.base.Engine.0x..f4 INFO > {'cod_specie': None, 'attivita_codice': '01302'} > 2007-02-16 15:30:31,986 sqlalchemy.engine.base.Engine.0x..f4 INFO DELETE > FROM specie WHERE specie.codice = %(codice)s > 2007-02-16 15:30:31,986 sqlalchemy.engine.base.Engine.0x..f4 INFO > {'codice': '33'} > 2007-02-16 15:30:31,990 sqlalchemy.engine.base.Engine.0x..f4 INFO COMMIT > > > pg=> select * from specie where codice='33'; > > codice | descrizione > -------+------------- > pg=> select * from specie where codice='33'; > > codice | descrizione > -------+------------- > (0 row) > > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---