2017-10-01 4 views
0

J'utilise python 2.7 et postgresql 9.3 avec psycopg2 2.7.3, lorsque j'essaie d'exécuter une requête de sélection alors que le passage de paramètres me donne cette erreur psycopg2.ProgrammingError: syntaxe erreur ou à proximité « oUpsycopg2.ProgrammingError: erreur de syntaxe à ou près de "OU

cur = con.cursor() 
cur.execute('SELECT * FROM test WHERE voucher= ? OR voucher= ?', ('RHAT', 'MSO')) 

le message d'erreur est

psycopg2.ProgrammingError: erreur de syntaxe à ou près "oU"

Répondre

2

psycopg2 utilise %s, pas des espaces réservés ? questionm arques:

cur.execute(
    'SELECT * FROM test WHERE voucher = %s OR voucher = %s', 
    ('RHAT', 'MSO')) 

Voir la Passing parameters to SQL queries section de la documentation psycopg2.

Les adaptateurs de base de données Python adhèrent généralement à l'un ou l'autre style (avec les styles de paramètres nommés qui l'accompagnent). Vérifiez toujours la documentation pour voir quel style est utilisé. Il y a un paramstyle variable sur la bibliothèque, mais cela ne reflète pas toujours très bien le support de plusieurs styles.

+0

Lorsque j'essaie de passer le nom de la table dans une requête, il ne semble pas fonctionner cur.execute ('DROP TABLE% s;', ('test',)) – Sameesh

+0

@Sameesh: un nom de table n'est pas une donnée, non. Un espace réservé échappe * data * spécifiquement pour ne pas être confondu avec des instructions SQL ou des noms d'objet. –

+0

Voir [Passer le nom de la colonne en tant que paramètre à PostgreSQL en utilisant psycopg2] (// stackoverflow.com/a/27290006) pour qu'une méthode inclue un nom de table. –