2017-10-01 36 views
0

psycopg2 2.7.3でpython 2.7とpostgresql 9.3を使用していますが、パラメータを渡して選択クエリを実行しようとするとこのエラーが発生します psycopg2.ProgrammingError:構文エラーで、または近くに「ORpsycopg2.ProgrammingError:または近くの構文エラー "OR

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

エラーメッセージが

psycopg2.ProgrammingErrorです:構文エラーまたはその付近 "OR"

答えて

2

Psycopg2は%sプレースホルダ、ない? questionmを使用していますアーク:

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

Psycopg2のドキュメントのPassing parameters to SQL queries sectionを参照してください。

一般に、Pythonデータベースアダプタは、(名前付きパラメータスタイルを伴う)1つまたは他のスタイルに固執します。どのスタイルが使用されているかは、ドキュメントを常にチェックしてください。ライブラリにはparamstyle variableがありますが、それは常に複数のスタイルのサポートを反映しているとは限りません。

+0

テーブル名をクエリに渡そうとしたときに、cur.execute( 'DROP TABLE%s;'、( 'test'))が機能しないようです。 – Sameesh

+0

@Sameesh:テーブル名はデータではなく、いいえ。プレースホルダはSQL命令やオブジェクト名と誤解されないように* data *をエスケープします。 –

+0

タブ名を含める方法については、[psycopg2を使用してPostgreSQLへのパラメータとしてカラム名を渡す](// stackoverflow.com/a/27290006)を参照してください。 –

関連する問題