From a9db1a61d3aa7a26bf30f2cd1e9fe7ae27178477 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Victor=20Frans=20Pondaco=20Winandy?= <jvfpw18@inf.ufpr.br> Date: Wed, 13 Nov 2019 08:45:14 -0300 Subject: [PATCH] Add primary key to temporary table after insertion --- database/actions.py | 2 +- database/database_table.py | 31 ++++++++++++++++++++++--------- database/groups.py | 4 +++- 3 files changed, 26 insertions(+), 11 deletions(-) diff --git a/database/actions.py b/database/actions.py index 3b2cdcf..a346f0d 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 f603016..579619a 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 98e2580..4d83bbd 100644 --- a/database/groups.py +++ b/database/groups.py @@ -78,7 +78,9 @@ BASE = [ SIMCAQ_AGGREGATE = [ 'docente_por_escola.sql', 'idm.sql', - 'projecao_matricula.sql' + 'projecao_matricula.sql', + 'transporte.sql', + 'docente_por_formacao.sql' ] # ---------------------------------------------------------------------------------------# -- GitLab