On 07/11/2011 02:37 PM, Tony wrote: > I'm doing this: > sengine = create_enging(blah..blah) > smeta = MetaData(bind=sengine) > meta.reflect(sengine) > tables = smeta.tables.keys() > to get a list of tables in a database, but unfortunately the table > list are not in their dependency order. For example: > A is depending on B (has a foreign key reference to B), B is > depending on C, the correct table list should be [A,B,C]. Yet the > smeta.tables.keys() will only return a unsorted list. Is there an API > or a code snippet to show me how to sort the returned list on their > dependency order ? > > I have this dumb code snippet,which I think is really inefficient. > > sorted_table = [] > > > #=========================================================================== > # sort all table list on their dependency order > > #=========================================================================== > while len(sorted_table) != len(tables): > for table_name in tables: > if table_name in sorted_table: > continue > table = Table(table_name, smeta, autoload=True) > if len(table.foreign_keys) == 0: > sorted_table.append(table_name) > else: > for foreign_key in table.foreign_keys: > if foreign_key.target_fullname.split(".")[0] in > sorted_table: > pass > else:break > else: > sorted_table.append(table_name) > > Thanks && Regards > Tony
SQLAlchemy provides this via smeta.sorted_tables. -Conor -- 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.