C'est théoriquement possible mais je ne le recommanderais pas :
Essentiellement, vous avez un déclencheur sur la table qui appelle un UDF qui communique avec votre application Python d'une manière ou d'une autre.
Les pièges incluent ce qui se passe s'il y a une erreur ?
Et si ça bloque ? Idéalement, tout ce qui se passe à l'intérieur d'un déclencheur devrait être quasi instantané.
Que se passe-t-il si c'est à l'intérieur d'une transaction qui est annulée ?
Je suis sûr qu'il y a beaucoup d'autres problèmes auxquels je n'ai pas pensé non plus.
Une meilleure façon, si possible, est de faire en sorte que votre couche d'accès aux données informe le reste de votre application. Si vous cherchez à savoir quand un programme indépendant de votre volonté modifie la base de données, vous risquez de ne pas avoir de chance.
Une autre façon moins idéale mais imo meilleure que d'appeler un autre programme à partir d'un déclencheur consiste à définir une sorte de table "LastModified" qui est mise à jour par des déclencheurs avec des déclencheurs. Ensuite, dans votre application, vérifiez simplement si cette date/heure est postérieure à la dernière vérification.