def get_foreign_keys(self, connection, table_name, schema=None, **kw): pyodbc_crsr = connection.connection.cursor() db_path = pyodbc_crsr.tables(table=table_name).fetchval() if db_path: db_engine = win32com.client.Dispatch( self._get_dao_string(pyodbc_crsr)) db = db_engine.OpenDatabase( db_path, False, True, "MS Access;PWD={}".format(connection.engine.url.password), ) fk_list = [] for rel in db.Relations: if rel.ForeignTable.casefold() == table_name.casefold(): fk_dict = { "constrained_columns": [], "referred_schema": None, "referred_table": rel.Table, "referred_columns": [], "name": rel.Name, } for fld in rel.Fields: fk_dict["constrained_columns"].append(fld.ForeignName) fk_dict["referred_columns"].append(fld.Name) fk_list.append(fk_dict) return fk_list else: util.raise_( exc.NoSuchTableError("Table '%s' not found." % table_name), )
def _prepared_columns(self, table, create_columns, raw_connection): columns, partitions, buckets = [], [], [] raw_conn_partitions = self._get_raw_connection_partitions( raw_connection) raw_conn_buckets = self._get_raw_connection_buckets(raw_connection) for create_column in create_columns: column = create_column.element column_dialect_opts = column.dialect_options["awsathena"] try: processed = self.process(create_column) if processed is not None: if (column_dialect_opts["partition"] or column.name in raw_conn_partitions or f"{table.name}.{column.name}" in raw_conn_partitions): partitions.append(f"\t{processed}") else: columns.append(f"\t{processed}") if (column_dialect_opts["cluster"] or column.name in raw_conn_buckets or f"{table.name}.{column.name}" in raw_conn_buckets): buckets.append( f"\t{self.preparer.format_column(column)}") except exc.CompileError as ce: util.raise_( exc.CompileError( util. u(f"(in table '{table.description}', column '{column.name}'): " f"{ce.args[0]}")), from_=ce, ) return columns, partitions, buckets
def go(): try: try: raise KeyError("foo") except KeyError as ke: util.raise_(Exception("oops"), from_=ke) except Exception as err: # noqa pass
def get_pk_constraint(self, connection, table_name, schema=None, **kw): pyodbc_crsr = connection.connection.cursor() db_path = pyodbc_crsr.tables(table=table_name).fetchval() if db_path: db_engine = win32com.client.Dispatch( self._get_dao_string(pyodbc_crsr)) db = db_engine.OpenDatabase( db_path, False, True, "MS Access;PWD={}".format(connection.engine.url.password), ) tbd = db.TableDefs(table_name) for idx in tbd.Indexes: if idx.Primary: return { "constrained_columns": [fld.Name for fld in idx.Fields], "name": idx.Name, } else: util.raise_( exc.NoSuchTableError("Table '%s' not found." % table_name), )