diff --git a/database/actions.py b/database/actions.py index 3b2cdcf568dca5676ed4e32f298be6b50ead6a3e..a346f0da38e13d5f0045a55adcda610dc8e417e2 100644 --- a/database/actions.py +++ b/database/actions.py @@ -25,7 +25,6 @@ from os import chdir from datetime import datetime from database.base import MissingTableError from database.database_table import gen_data_table, copy_tabbed_to_csv -import database.groups import settings from database.groups import DATA_GROUP, DATABASE_TABLE_NAME import pandas as pd @@ -53,6 +52,7 @@ def temporary_data(connection, file_name, table, year, offset=2, table.populate_temporary(ttable, file_name, header, year, delimiters, null, offset, bind=connection) table.apply_derivatives(ttable, ttable.columns.keys(), year, bind=connection) + table.add_pk_to_temporary(ttable, bind=connection) return ttable diff --git a/database/database_table.py b/database/database_table.py index f603016b905de947d2b2209a32590c09eeb3de2f..579619accf5668102290f534ffece6fec0480178 100644 --- a/database/database_table.py +++ b/database/database_table.py @@ -28,6 +28,7 @@ import jsbeautifier from sqlalchemy import Table, Column, inspect, Integer, String, Boolean,\ PrimaryKeyConstraint, ForeignKeyConstraint, text from sqlalchemy.sql import select, insert, update, delete, func +from sqlalchemy.schema import AddConstraint import pandas as pd from database.base import DatabaseColumnError, MissingProtocolError, DatabaseMappingError, \ @@ -187,18 +188,28 @@ class DatabaseTable(Table): except InvalidTargetError: pass - pks = get_primary_keys(self) - primary_key = [] - for pk in pks: - primary_key.append(ttable.columns.get(pk.name)) - - ttable.constraints.add(PrimaryKeyConstraint(*primary_key)) - for column in additional: ttable.append_column(Column(column, String(255))) return ttable + def add_pk_to_temporary(self, ttable, bind=None): + ''' + Add the primary keys constraint to the temporary table + ''' + if bind is None: + bind = self.metadata.bind + + pks = get_primary_keys(self) + primary_keys = [] + for pk in pks: + primary_keys.append(ttable.columns.get(pk.name)) + + for pk in primary_keys: + new_pk = PrimaryKeyConstraint(pk) + query = AddConstraint(new_pk) + bind.execute(query) + def populate_temporary(self, ttable, in_file, header, year, delimiters=[';', '\\n', '"'], null='', offset=2, bind=None): ''' @@ -235,11 +246,13 @@ class DatabaseTable(Table): ''' 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 + ttable = self.get_temporary(year=year) + ttable.create(bind) + self.add_pk_to_temporary(ttable, bind) + original_columns = list(self.columns) query = ttable.insert().from_select(original_columns, select(original_columns) .where(self.c[settings.YEAR_COLUMN] == year)) diff --git a/database/groups.py b/database/groups.py index d99ab8310cc8ecb36fca8dbb0f8549b7a2be9b69..247fea5ed5dbd77ed64acebb2f2637aa8e92e5aa 100644 --- a/database/groups.py +++ b/database/groups.py @@ -89,7 +89,9 @@ BASE = [ SIMCAQ_AGGREGATE = [ 'docente_por_escola.sql', 'idm.sql', - 'projecao_matricula.sql' + 'projecao_matricula.sql', + 'transporte.sql', + 'docente_por_formacao.sql' ] # ---------------------------------------------------------------------------------------#