Hello list !
I have a little problem with the cascade property I think. Some rows are
not deleted in the FK table.
My tables definition looks like :
create table invasives (
id serial not null,
scientific_name varchar(200) not null,
constraint pk_invasive
primary key (id),
);
create table languages (
id serial not null,
iso_code char(2) not null,
language varchar(100) not null,
constraint pk_language
primary key(id)
);
create table invasive_names (
name varchar(200) not null,
language_id integer not null,
invasive_id integer not null,
constraint pk_invasive_names
primary key (language_id, invasive_id),
constraint fk_language
foreign key (language_id) references languages(id),
constraint fk_invasive
foreign key (invasive_id) references invasives(id)
);
class InvasiveName(object):
pass
class Invasive(object):
pass
class Language(object):
pass
mapper(InvasiveName, invasive_names)
mapper(Invasive, invasives, properties = {
'names' : relation(InvasiveName, backref='invasive', cascade='all,
delete-orphan')
}
)
mapper(Language, languages, properties = {
'invasive_names' : relation(InvasiveName, backref='language',
cascade='all, delete-orphan')
}
)
(invasives, invasive_names and languages are just the Table()
definitions of the tables, I haven't put them for visibility)
When I do :
=====
query_invasive = session.query(Invasive)
invasive_object = query_invasive.get(153)
invasive_object.names = []
session.flush()
=====
This work !!, the rows in invasive_names are deleted.
However if I do :
=====
query_invasive = session.query(Invasive)
query_language = session.query(Language)
invasive_object = query_invasive.get(153)
invasive_object.names = []
invasive_name_object = InvasiveName()
language_object = query_language.get(1)
invasive_name_object.language = language_object
invasive_name_object.name = 'foo bar'
invasive_object.names.append(invasive_name_object)
session.flush()
=====
This doesn't work if the row already exists in the invasive_names table :
LOG: statement: INSERT INTO invasive_names (name, language_id,
invasive_id) VALUES ('foo bar', 1, 153)
ERROR: duplicate key violates unique constraint "pk_invasive_names"
LOG: statement: ABORT
It should be UPDATE statement instead of INSERT statement ..
Any idea what I'm doing wrong ? It should be something with the cascade
property I guess ..
Thanks,
Julien
-------------------------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users