【问题标题】:psycopg2.ProgrammingError: syntax error at or near "ORpsycopg2.ProgrammingError:“或”附近的语法错误
【发布时间】:2018-03-12 16:57:28
【问题描述】:

我正在使用 python 2.7 和 postgresql 9.3 和 psycopg2 2.7.3,当我尝试执行一个选择查询同时传递参数时给了我这个错误 psycopg2.ProgrammingError:“或”处或附近的语法错误

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

错误信息是

psycopg2.ProgrammingError:“或”处或附近的语法错误

【问题讨论】:

    标签: python postgresql psycopg2


    【解决方案1】:

    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,但这并不总是很好地反映了对多种样式的支持。

    【讨论】:

    • 当我尝试将表名传递给查询时,它似乎不起作用 cur.execute('DROP TABLE %s ;', ('test',))
    • @Sameesh:表名不是数据,不是。占位符专门转义 data,以免被误认为 SQL 指令或对象名称。
    • 查看Pass column name as parameter to PostgreSQL using psycopg2 了解包含表名的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    • 1970-01-01
    • 2019-05-26
    相关资源
    最近更新 更多