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

-- 
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.

Reply via email to