Votre lien vers la documentation Psycopg2 ça s'explique en quelque sorte, non ?
Ainsi, à moins que vous n'utilisiez un niveau d'isolation différent ou que vous n'utilisiez PgBouncer, votre premier exemple devrait fonctionner correctement. Cependant, si vous souhaitez un contrôle plus précis sur ce qui se passe exactement pendant une transaction, la méthode try/except peut être la meilleure, car elle est parallèle à l'état de la transaction de la base de données elle-même.