Hi Mike, the situation I am encountering is when the other table is not part of the metadata collection i.e. SQLAlchemy doesn't know anything about it. It looks like the unit-tests enumerate the tables by calling table_names() which causes has_table() and reflecttable() to be called in turn. There doesn't appear to be a way of expressing that a table is referenced by a foreign key constraint .. from what I can see, the various dialects implementation of reflecttable check to see if this table references other tables.
At the moment, I am hacking up my own visit_tables() in the SchemaDropper and putting in an explicit check to see if I am targeted by any FKs .. if so, I will do an ALTER TABLE on the other tables to remove the FK constraint to me. pjjH On Mar 13, 2:41 pm, "Michael Bayer" <mike...@zzzcomputing.com> wrote: > SQLAlchemy normally drops tables in order of foreign key dependency so > that there's no need for ALTER. in the case that two tables have a mutual > foreign key dependency, one of the ForeignKey objects has the > "use_alter=True" flag set so that just the one FK gets dropped first via > ALTER. > > phrrn...@googlemail.com wrote: > > > I am encountering a problem with getting the unit tests to run on > > Sybase because of cascades of errors originating from failure to drop > > a table that is referenced by a FK constraint in another table. When > > attempting to drop the people table, I need the SybaseSQLSchemaDropper > > to emit SQL like this which first does an ALTER TABLE to remove FK > > constraints from all tables which reference people: > > > 344:1> ALTER TABLE managers DROP CONSTRAINT managers_1466289798 > > 344:2> go > > 345:1> drop table people > > 345:2> go > > 346:1> > > > How should one deal with the situation when the referring tables are > > not part of the same metadata collection? > > > pjjH > > > 341:2> sp__revtable people > > 341:3> go > > -- Table_DDL > > > ---------------------------------------------------------------------- > > CREATE TABLE people > > ( > > person_id int identity NOT NULL, > > name varchar(50) NULL, > > type varchar(30) NULL > > ) > > > ----------------------------------------------------------------------------------------------------- > > ------------------- > > > ALTER TABLE people ADD PRIMARY KEY CLUSTERED ( person_id) > > -- FOREIGN REFERENCE > > > --------------------------------------- > > -- No Indexes found in Current Database > > > (return status = 0) > > 342:1> sp_helpconstraint people > > 342:2> go > > name > > definition created > > ------------------- > > ------------------------------------------------------------- > > ------------------- > > managers_1466289798 managers FOREIGN KEY (person_id) REFERENCES people > > (person_id) Mar 4 2009 9:12PM > > people_17556708171 PRIMARY KEY INDEX ( person_id) : CLUSTERED, > > FOREIGN REFERENCE Mar 4 2009 9:11PM > > > Total Number of Referential Constraints: 1 > > > Details: > > -- Number of references made by this table: 0 > > -- Number of references to this table: 1 > > -- Number of self references to this table: 0 > > > Formula for Calculation: > > Total Number of Referential Constraints > > = Number of references made by this table > > + Number of references made to this table > > - Number of self references within this table > > > (2 rows affected, return status = 0) > > > 343:1> sp__revtable managers > > 343:2> go > > -- Table_DDL > > > ---------------------------------------------------------------------- > > CREATE TABLE managers > > ( > > person_id int identity NOT NULL, > > status varchar(30) NULL, > > manager_name varchar(50) NULL > > ) > > > ----------------------------------------------------------------------------------------------------- > > ------------------- > > > ALTER TABLE managers ADD PRIMARY KEY CLUSTERED ( person_id) > > > constraint_desc > > > ----------------------------------------------------------------------------------------------------- > > ------------------------------------------------------------------------------------------------------------- > > --------------------------------------------- > > > ALTER TABLE managers ADD CONSTRAINT managers_1466289798 > > FOREIGN KEY (person_id) REFERENCES people(person_id) > > > --------------------------------------- > > -- No Indexes found in Current Database > > > (return status = 0) --~--~---------~--~----~------------~-------~--~----~ 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 sqlalchemy+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---