import _mysql table_prefixes = ["users","activities"] def writedeps(db, tbl): db.query("show create table %s"%tbl) r = db.store_result() row = r.fetch_row() while row: for i in (x.strip() for x in row[0][1].split("\n")): if i.startswith("CONSTRAINT"): pieces = i.split() local = remote = None for idx, j in enumerate(pieces): if j == "KEY": local = pieces[idx+1].replace("`","").replace("(","").replace(")","") if j == "REFERENCES": remote = pieces[idx+1].replace("`","") print '"%s" -> "%s" [label="%s"];'%(tbl,remote,local) row = r.fetch_row() def get_tables(db): db.query("show tables") r = db.store_result() row = r.fetch_row() while row: prefix = row[0][0].split("_")[0] if prefix in table_prefixes: yield row[0][0] row = r.fetch_row() def main(): db=_mysql.connect("localhost","nibrahim","foo","sample") print "Digraph F {\n" print 'ranksep=1.5; size = "17.5,7.5";rankdir=LR;' for i in get_tables(db): writedeps(db, i) print "}" if __name__ == "__main__": import sys sys.exit(main())