mirror of https://github.com/interlegis/sapl.git
Edward Ribeiro
7 years ago
1 changed files with 0 additions and 150 deletions
@ -1,150 +0,0 @@ |
|||||
#!/usr/bin/python |
|
||||
|
|
||||
# requisito: pip install PyMySQL |
|
||||
|
|
||||
import pymysql.cursors |
|
||||
|
|
||||
HOST = 'localhost' |
|
||||
USER = 'root' |
|
||||
PASSWORD = '' |
|
||||
DB = '' |
|
||||
|
|
||||
|
|
||||
SELECT_EXCLUIDOS = "SELECT %s FROM %s WHERE ind_excluido = 1 ORDER BY %s" |
|
||||
|
|
||||
REGISTROS_INCONSISTENTES = "DELETE FROM %s WHERE %s " |
|
||||
"in (%s) AND ind_excluido = 0 " |
|
||||
|
|
||||
EXCLUI_REGISTRO = "DELETE FROM %s WHERE ind_excluido=1" |
|
||||
|
|
||||
NORMA_DEP = "DELETE FROM vinculo_norma_juridica WHERE cod_norma_referente in (%s) OR \ |
|
||||
cod_norma_referida in (%s) AND ind_excluido = 0 " |
|
||||
|
|
||||
mapa = {} # mapa com tabela principal -> tabelas dependentes |
|
||||
|
|
||||
mapa['tipo_autor'] = ['autor'] |
|
||||
mapa['materia_legislativa'] = ['acomp_materia', 'autoria', 'despacho_inicial', |
|
||||
'documento_acessorio', 'expediente_materia', |
|
||||
'legislacao_citada', 'materia_assunto', |
|
||||
'numeracao', 'ordem_dia', 'parecer', |
|
||||
'proposicao', 'registro_votacao', |
|
||||
'relatoria', 'tramitacao'] |
|
||||
mapa['norma_juridica'] = ['vinculo_norma_juridica'] |
|
||||
mapa['comissao'] = ['composicao_comissao'] |
|
||||
mapa['sessao_legislativa'] = ['composicao_mesa'] |
|
||||
mapa['tipo_expediente'] = ['expediente_sessao_plenaria'] |
|
||||
|
|
||||
""" |
|
||||
mapa['autor'] = ['tipo_autor', 'partido', 'comissao', 'parlamentar'] |
|
||||
mapa['parlamentar'] = ['autor', 'autoria', 'composicao_comissao', |
|
||||
'composicao_mesa', 'dependente', 'filiacao', |
|
||||
'mandato', 'mesa_sessao_plenaria', 'oradores', |
|
||||
'oradores_expediente', 'ordem_dia_presenca', |
|
||||
'registro_votacao_parlamentar', 'relatoria', |
|
||||
'sessao_plenaria_presenca', 'unidade_tramitacao'] |
|
||||
""" |
|
||||
|
|
||||
|
|
||||
def get_ids_excluidos(cursor, query): |
|
||||
""" |
|
||||
recupera as PKs de registros com ind_excluido = 1 da tabela principal |
|
||||
""" |
|
||||
cursor.execute(query) |
|
||||
excluidos = cursor.fetchall() |
|
||||
# flat tuple of tuples with map transformation into string |
|
||||
excluidos = [str(val) for sublist in excluidos for val in sublist] |
|
||||
return excluidos |
|
||||
|
|
||||
|
|
||||
def remove_tabelas(cursor, tabela_principal, pk, query_dependentes=None): |
|
||||
|
|
||||
QUERY = SELECT_EXCLUIDOS % (pk, tabela_principal, pk) |
|
||||
ids_excluidos = get_ids_excluidos(cursor, QUERY) |
|
||||
print("\nRegistros da tabela '%s' com ind_excluido = 1: %s" % |
|
||||
(tabela_principal.upper(), len(ids_excluidos))) |
|
||||
|
|
||||
""" |
|
||||
Remove registros de tabelas que dependem da tabela principal, |
|
||||
e que se encontram com ind_excluido = 0 (nao excluidas), se |
|
||||
tais registros existirem. |
|
||||
""" |
|
||||
if ids_excluidos: |
|
||||
print("Dependencias inconsistentes") |
|
||||
for tabela in mapa[tabela_principal]: |
|
||||
|
|
||||
QUERY_DEP = REGISTROS_INCONSISTENTES % ( |
|
||||
tabela, pk, ','.join(ids_excluidos)) |
|
||||
|
|
||||
# Trata caso especifico de norma_juridica |
|
||||
if query_dependentes: |
|
||||
QUERY_DEP = query_dependentes % (','.join(ids_excluidos), |
|
||||
','.join(ids_excluidos)) |
|
||||
|
|
||||
print(tabela.upper(), cursor.execute(QUERY_DEP)) |
|
||||
|
|
||||
""" |
|
||||
Remove todos os registros com ind_excluido = 1 das tabelas |
|
||||
dependentes e da tabela principal, nesta ordem. |
|
||||
""" |
|
||||
print("\n\nRegistros com ind_excluido = 1") |
|
||||
for tabela in mapa[tabela_principal] + [tabela_principal]: |
|
||||
QUERY = EXCLUI_REGISTRO % tabela |
|
||||
print(tabela.upper(), cursor.execute(QUERY)) |
|
||||
|
|
||||
|
|
||||
def remove_excluidas(cursor): |
|
||||
cursor.execute("SHOW_TABLES") |
|
||||
for row in cursor.fetchall(): |
|
||||
print(row) |
|
||||
|
|
||||
|
|
||||
def remove_proposicao_invalida(cursor): |
|
||||
return cursor.execute( |
|
||||
"DELETE FROM proposicao WHERE cod_mat_ou_doc is null") |
|
||||
|
|
||||
|
|
||||
def remove_materia_assunto_invalida(cursor): |
|
||||
return cursor.execute( |
|
||||
"DELETE FROM materia_assunto WHERE cod_assunto = 0") |
|
||||
|
|
||||
|
|
||||
def shotgun_remove(cursor): |
|
||||
for tabela in get_ids_excluidos(cursor, "SHOW TABLES"): |
|
||||
try: |
|
||||
cursor.execute("DELETE FROM %s WHERE ind_excluido = 1" % tabela) |
|
||||
except: |
|
||||
pass |
|
||||
|
|
||||
|
|
||||
if __name__ == '__main__': |
|
||||
connection = pymysql.connect(host=HOST, |
|
||||
user=USER, |
|
||||
password=PASSWORD, |
|
||||
db=DB) |
|
||||
cursor = connection.cursor() |
|
||||
# TIPO AUTOR |
|
||||
remove_tabelas(cursor, 'tipo_autor', 'tip_autor') |
|
||||
# MATERIA LEGISLATIVA |
|
||||
remove_tabelas(cursor, 'materia_legislativa', 'cod_materia') |
|
||||
# NORMA JURIDICA |
|
||||
remove_tabelas(cursor, 'norma_juridica', 'cod_norma', NORMA_DEP) |
|
||||
# COMISSAO |
|
||||
remove_tabelas(cursor, 'comissao', 'cod_comissao') |
|
||||
# SESSAO LEGISLATIVA |
|
||||
remove_tabelas(cursor, 'sessao_legislativa', 'cod_sessao_leg') |
|
||||
# EXPEDIENTE SESSAO |
|
||||
remove_tabelas(cursor, 'tipo_expediente', 'cod_expediente') |
|
||||
# AUTOR |
|
||||
remove_tabelas(cursor, 'autor', 'cod_autor') |
|
||||
# PARLAMENTAR |
|
||||
remove_tabelas(cursor, 'parlamentar', 'cod_parlamentar') |
|
||||
|
|
||||
# PROPOSICAO |
|
||||
remove_proposicao_invalida(cursor) |
|
||||
|
|
||||
# MATERIA_ASSUNTO |
|
||||
remove_materia_assunto_invalida(cursor) |
|
||||
|
|
||||
# shotgun_remove(cursor) |
|
||||
|
|
||||
cursor.close() |
|
Loading…
Reference in new issue