From 015246ee8ac2e9bc096d8d57697e0f7437db33fa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Wed, 12 Jun 2019 07:36:23 -0300 Subject: [PATCH] run_aggregations now also run denormalizations --- database/database_table.py | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/database/database_table.py b/database/database_table.py index 2810be1..c5aecc5 100644 --- a/database/database_table.py +++ b/database/database_table.py @@ -227,6 +227,21 @@ class DatabaseTable(Table): return query + def create_temporary_mirror(self, year, bind=None): + ''' + Creates a new temporary table where its data mirrors the original, taken directly from the database + ''' + ttable = self.get_temporary(year=year) + ttable.create(bind) + if bind is None: + bind = self.metadata.bind + + original_columns = list(self.columns) + query = ttable.insert().from_select(original_columns, select(original_columns)) + bind.execute(query) + + return ttable + def check_protocol(self): ''' Raises MissingProtocolError if no protocol is loaded. @@ -789,7 +804,7 @@ class DatabaseTable(Table): def _resolv_derivative(self, original, year): ''' - Populates self._derivatives with all necessary derivatives to satify original in a given + Populates self._derivatives with all necessary derivatives to satisfy original in a given year. ''' if not hasattr(self, '_derivatives'): @@ -855,6 +870,7 @@ class DatabaseTable(Table): query[derivative['dbcolumn'][0]] = text(derivative['processed']) query = update(ttable).values(**query) + print(query) bind.execute(query) return self._derivatives @@ -882,11 +898,11 @@ class DatabaseTable(Table): selecter = select([getattr(func, aggregation)(source_column)]) try: - fk_dict = [(fk_column, fkey) for fk_column, fkey in referred_table.get_relations(self)] + fk_tuples = [(fk_column, fkey) for fk_column, fkey in referred_table.get_relations(self)] except MissingForeignKeyError: - fk_dict = [(fk_column, fkey) for fk_column, fkey in self.get_relations(referred_table)] + fk_tuples = [(fk_column, fkey) for fk_column, fkey in self.get_relations(referred_table)] - for fk_column, fkey in fk_dict: + for fk_column, fkey in fk_tuples: selecter = selecter.where(fk_column == fkey) if year: selecter = selecter.where(self.c.ano_censo == year) @@ -916,6 +932,11 @@ class DatabaseTable(Table): query = self._aggregate(column, func, source_column, year) bind.execute(query) + # Run derivatives + ttable = self.create_temporary_mirror(year, bind) + self.apply_derivatives(ttable, ttable.columns.keys(), year, bind) + self.update_from_temporary(ttable, ttable.columns.keys(), bind) + def get_relations(self, table): ''' Yields relations between two tables in format -- GitLab