def get_foreign_keys(self, connection, table_name, schema=None, **kw):
"""
Overrides base class method
"""
if schema is None:
schema = self.default_schema_name
stmt = select([column('IndexID'), column('IndexName'), column('ChildKeyColumn'), column('ParentDB'),
column('ParentTable'), column('ParentKeyColumn')],
from_obj=[text('DBC.All_RI_ChildrenV')]) \
.where(and_(text('ChildTable = :table'),
text('ChildDB = :schema'))) \
.order_by(asc(column('IndexID')))
res = connection.execute(stmt, schema=schema, table=table_name).fetchall()
def grouper(fk_row):
return {
'name': fk_row.IndexName or fk_row.IndexID, #ID if IndexName is None
'schema': fk_row.ParentDB,
'table': fk_row.ParentTable
}
# TODO: Check if there's a better way
fk_dicts = list()
for constraint_info, constraint_cols in groupby(res, grouper):
fk_dict = {
'name': constraint_info['name'],
'constrained_columns': list(),
'referred_table': constraint_info['table'],
'referred_schema': constraint_info['schema'],
'referred_columns': list()
}
for constraint_col in constraint_cols:
fk_dict['constrained_columns'].append(self.normalize_name(constraint_col['ChildKeyColumn']))
fk_dict['referred_columns'].append(self.normalize_name(constraint_col['ParentKeyColumn']))
fk_dicts.append(fk_dict)
return fk_dicts
评论列表
文章目录