psycopg2 LIKE Percent Escape
Ce skill est une fiche de référence pour Claude, intégrée au repository divinevideo/divine-mobile, une application Flutter de partage de vidéos courtes basée sur Nostr. Bien que le projet soit principalement Flutter/Dart, il semble utiliser des scripts Python avec PostgreSQL en coulisses — probablement pour des outils de migration, d'ingestion de données ou d'administration.
Problème couvert
Le skill documente un conflit classique de psycopg2 : le caractère % joue deux rôles distincts — wildcard SQL dans les clauses LIKE '%pattern%' et marqueur de substitution de paramètres (%s) dans les requêtes paramétrées. Lorsque les deux coexistent dans la même requête, psycopg2 lève une IndexError: tuple index out of range au moment du cursor.execute(), alors que la même requête s'exécute sans problème dans psql ou pgAdmin.
Solutions documentées
Le skill présente trois approches, de la plus simple à la plus robuste : doubler les signes % en %% pour les patterns statiques, passer le pattern LIKE entier comme paramètre %s (approche recommandée, sans ambiguïté), et utiliser le module psycopg2.sql pour la construction dynamique de requêtes. Des exemples concrets de code avant/après illustrent chaque option.
Utilisation
Ce skill sert de mémoire procédurale pour Claude dans ce repo : quand une session de développement rencontre cette erreur spécifique, Claude peut s'y référer pour proposer directement la correction appropriée sans avoir à raisonner à partir de zéro. Il est à utiliser comme point de départ ou référence lors de toute intervention sur du code Python interagissant avec PostgreSQL via psycopg2 dans ce projet.