【问题标题】:Why does PyODBC Thinks my SQL Only has 1 Param为什么 PyODBC 认为我的 SQL 只有 1 个参数
【发布时间】:2019-10-20 00:21:38
【问题描述】:

谁能帮我理解为什么 ODBC 只认为我的 sql 中有 1 个参数?

sql = """
   IF OBJECT_ID('?', 'U') IS NOT NULL
   begin
       DROP TABLE ?
   end"""
cursor.execute(sql, table_name, table_name)
pyodbc.ProgrammingError: ('The SQL contains 1 parameter markers, but 2 parameters were supplied', 'HY000')

【问题讨论】:

    标签: python-3.x pyodbc


    【解决方案1】:

    您正在传递文字字符串 '?'到 OBJECT_ID 函数。

    IF OBJECT_ID('?', 'U') IS NOT NULL
    

    应该是

    IF OBJECT_ID(?, 'U') IS NOT NULL
    

    但如果这是 SQL Server,则存在另一个问题。不能参数化 DDL 语句,DROP TABLE 是 DDL 语句。

    【讨论】:

    • 谢谢@David。我忘记了 ODBC 驱动程序在将我的 SQL 转换为基本上使用 sql declare vars 的语句时必须做什么。这不是简单的字符串插值。你是对的,它仅限于 DML,基本上是纯 ANSI-92 的东西。您的 cmets 将我带到了文档,该文档也很有帮助。我认为错误消息可能会更有帮助,但不用担心。无论如何,回到我的 DML 数据整理逻辑的内联 SQL。 docs.microsoft.com/en-us/sql/odbc/reference/develop-app/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 1970-01-01
    • 2021-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多