psycopg2.ProgrammingError: syntax error at or near "OR

psycopg2.ProgrammingError: syntax error at or near "OR

我正在使用 python 2.7 和 postgresql 9.3 以及 psycopg2 2.7.3,当我尝试在传递参数时执行 select 查询时它给了我这个错误 psycopg2.ProgrammingError:“OR

处或附近的语法错误
cur = con.cursor()
cur.execute('SELECT * FROM test WHERE voucher= ? OR voucher= ?', ('RHAT', 'MSO'))

错误信息是

psycopg2.ProgrammingError:"OR"

处或附近的语法错误

Psycopg2 使用 %s 占位符,而不是 ? 问号:

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

请参阅 Psycopg2 文档的 Passing parameters to SQL queries section

Python 数据库适配器通常坚持一种或另一种风格(伴随命名参数风格)。始终检查文档以查看使用的是什么样式。库中有一个 paramstyle variable,但并不总能很好地反映对多种样式的支持。