Licença para expressar minha duvida. Estou com uma duvida de uma logica em python.

Link do repositório https://github.com/heuderdev/notifications

Estou fazendo um sisteminha que tenha a capacidade de notificar um usuário que ele deve executar uma tarefa em um determinado horário.

Estou usando CronJob do Python para fazer isso, e realmente ele está conseguindo fica executando de tempos e tempos.

A idéia aqui é quando tiver uma tarefa para ser executada preciso salvar no banco de dados na TABLE notifications.

Essa procedure está trasendo o seguinte resultado:

// cursor.callproc('PROCEDURE_VERIFY_TASKS',['00:00'])
[(1, 1, 'Tomar água, faz bem pra saúde;', '00:00', 'heuder.sena'), (1, 2, 'verificar a quantidade de chamados no topdesk.', '00:00', 'heuder.sena'), (1, 3, 'TIRAR O REGISTRO DO ANALITICO', '00:00', 'heuder.sena')]

O select que essa procedure faz é cursor.callproc('PROCEDURE_VERIFY_TASKS',['00:00'])

select 
    contributions.id as contributions_id,
    tasks.id as tasks_id,
    tasks.name AS tasks_name,
    schedules.time AS schedules_time,
    contributions.name AS contributions_name
from tasks
    inner join schedules_tasks on schedules_tasks.task_id = tasks.id
    inner join schedules on schedules.id = schedules_tasks.schedule_id
    inner join contributors_tasks on  contributors_tasks.task_id = tasks.id
    inner join contributions on contributions.id = contributors_tasks.contributor_id
	WHERE schedules.time = '00:00';
	
CREATE TABLE notifications(
  `id` INT(11) AUTO_INCREMENT,
  `code_uuid` VARCHAR(255) NOT NULL,
  `was_verified` TINYINT(1) NOT NULL DEFAULT 0, --  = foi verificado
  `task_id` INT(11) NOT NULL,
  `contributor_id` INT(11) NOT NULL,
  `created_at` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
  `updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
   PRIMARY KEY(id)
);

Logo a seguir temos o código que está fazendo o CronJob, o problema que estou enfretando é que ao passar pelo loop está inserindo duplicado cada notificação.

def cron_job():
    print("INICIANDO O JOB")
    agora = datetime.datetime.now().strftime("%H:%M")
    try:
        connection = get_db_connection()
        cursor = connection.cursor()
        cursor.callproc('PROCEDURE_VERIFY_TASKS',['00:00'])
        NOTIFICATION = []
        for result in cursor.stored_results():

            print(result.fetchall())

        for (r,i) in result.fetchall():
            sql = f"INSERT INTO notifications (code_uuid,task_id,contributor_id) VALUES('{str(uuid.uuid4())}','{r[0]}','{r[1]}')"
            cursor.execute(sql)
            connection.commit()
            print(i)
            print(r)
                
    except Error as e:
        print(e)

    finally:
        cursor.close()
        connection.close()
print("FIM DO JOB")


sched = BackgroundScheduler(daemon=True)
sched.add_job(cron_job,'interval',seconds=5)
sched._job_defaults["misfire_grace_time"] = 30
sched.start()

Código completo: https://github.com/heuderdev/notifications/blob/main/app.py

Humildemente gostária que alguem podesse me ajudar a entender essa lógica, pois ainda sou um iniciante. Na verdade essa é a primeira vez que faço algo em Python.

O retorno do seu select está trazendo registros duplicados devido aos joins?

Se for o caso coloca 'distinct' no seu select que ele filtra os registros repetidos.

Bom dia, @diogomattioli Não está sendo dupliado no select não. É a hora que pretendo fazer o insert na TABLE notifications que está sendo inserido duas vezes, sei que é nesse loop que está o erro, só não estou conseguindo resolver.
Está chegando os dois registro. ![infraestrutura](https://doc-14-a4-docs.googleusercontent.com/docs/securesc/gsie8kb3qm3fc7nq1qroh7foneup5dut/3aaku25br8nnr6iik3folp0ubnhk5aua/1694107425000/03120638663128691026/08789073103475868300/1OO4_vn0dIsUj1h2ko2fol6DsHCS0N_jf?e=view&ax=AH3YgiCu8t4Vwy4Skou0rt76vzU_fH8LdNGoVGYEozoe2gOPCAWp_UsJkX_nYMKo3aDX99URwqj6vepDOKjy5qpGLE_7VdoH-DLP_IsRKfvJPHmj9sF70jpBWfTUiyGPRkyfTpV_YoAUcMfc9BVlC2IAZT8razefKmHjPImWgy3Sd7yWNjHQjTPFcpmzJRCYbi9zdW3k5_p4g5gFtvB78955pShOd-tK5DSovoQNx2f-MOikf5Ak7l04mCoGZ26rHFp3WfkncKD5-3QvvW3oAzrlxLAJR1KjDXnsobxPeigwIDwan43od0Rh0J2Q9IACLpY9wDCig5R0z-rNj1ZNivJeU8P2K-cI7WCqqlDopcVWRHklqVSUkNNJSTiQEPIpfHyt_qPUyQ80D-xtqFhZOAYQMqj-zs7d9vjnwdpYKKYmW7pWdOLrQYIKMo2Fv0-_cpb22W__HTGQPAYzyNhCZM3OLvOZ9VxocytWZoV-DdOUv6VKKVigNaWQdjv1rWv5-ReJcB9NmNp1kQ6PRqqCnmMHCsp_V_5Py6ORtrU4lG1pZ2Ebkls5R_84Lj4MKhiOlE_HvuNsNAyeilRn_LkubHeAdPA6Cuk5VUL-isUwSYto6q07HBa3gcoZlaYT5eEG_g1NvsZSUwuj6sjLtTT2H1yzpmEXDiLrdP9kG_Y-hukTaNMF80jYkNt0go3Pg2zdb3bjyhbYwQb8eMswqGINlgoEaz92KU97f3igeZbj1YPxMM59fuhIGrrcfrXNRj0Vcz3KZ74SOo_3nUY1NJrpjEQt5xc9KF--ry6jM0BhtjBLj0j6sKySwVLKKP8AjaA3tsTYZ7B3K1ueQBYW3ts3c0KaeyLUDS-JtPOjV0flos7cR7p_YBPwg0P65VCzTLrRomw&uuid=183780d3-95ed-4555-91a3-019e6e10131a&authuser=0&nonce=39r2fgioslcdo&user=08789073103475868300&hash=363iulmh5qc71sg6ohbttiajne9b0gba) Porém no insert está inserindo duplicado. ![database](https://drive.google.com/file/d/1TbJKho2V10nMnjvH6MI8QUc7bkcHIeqF/view?usp=drivesdk) ```python from src.database.connect import get_db_connection from mysql.connector import Error import uuid import datetime def notifications(): print("notifications") agora = datetime.datetime.now().strftime("%H:%M") try: connection =get_db_connection() cursor = connection.cursor() sql=f"SELECT DISTINCT contributions.id as contributions_id, tasks.id as tasks_id,tasks.name AS tasks_name, schedules.time AS schedules_time, contributions.name AS contributions_name from tasks inner join schedules_tasks on schedules_tasks.task_id = tasks.id inner join schedules on schedules.id = schedules_tasks.schedule_id inner join contributors_tasks on contributors_tasks.task_id = tasks.id inner join contributions on contributions.id = contributors_tasks.contributor_id WHERE schedules.time = '14:20'" cursor.execute(sql) notification = cursor.fetchall() print(notification) for r in notification: sql = f"INSERT INTO notifications (code_uuid,task_id,contributor_id) VALUES('{str(uuid.uuid4())}','{r[1]}','{r[0]}')" cursor.execute(sql) connection.commit() except Error as e: print("") finally: cursor.close() connection.close() ```