예제 #1
0
 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), )
예제 #2
0
 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
예제 #3
0
        def go():
            try:
                try:
                    raise KeyError("foo")
                except KeyError as ke:

                    util.raise_(Exception("oops"), from_=ke)
            except Exception as err:  # noqa
                pass
예제 #4
0
 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), )