【问题标题】:pyodbc Incorrect syntax near '-'. (102)pyodbc '-' 附近的语法不正确。 (102)
【发布时间】:2017-08-01 10:34:44
【问题描述】:

我正在尝试从包含“-”短划线符号的表中选择所有数据,但出现错误

    cursor.execute(qStr)
pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near '-'. (102) (SQLExecDirectW)")

这是代码:

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=192.168.2.100\name;DATABASE=base;UID=user;PWD=pass')

try:
    cursor = cnxn.cursor()
except e:
    if e.__class__ == pyodbc.ProgrammingError:        
        conn == reinit()
        cursor = conn.cursor()

def checkIfEmpty (tableName):
    qStr = 'SELECT * FROM [' + tableName + ']'
    print(qStr)
    cursor.execute(qStr)
    asd=cursor.fetchone()
    if asd==None:
        return True
    else:
        return False

它会打印出正确的 SQL 语句 SELECT * FROM [Table-Name],并且在 Microsoft SQL Management Studio 中,此查询可以很好地用于复制粘贴,但它不会在 python 控制台中运行

同样的事情是:qStr = 'SELECT * FROM "' + tableName + '"

为什么会发生这种情况,我该如何解决?

【问题讨论】:

    标签: python sql pyodbc


    【解决方案1】:

    尝试在有破折号的地方使用括号。

    qStr = "SELECT * FROM [{}]".format(tableName)
    

    【讨论】:

    • 我使用 [ ] 只是为了尝试使用它,与“您的建议不起作用,同样的错误:>>> checkIfEmpty("table-Name") SELECT * FROM table-Name Traceback (most recent call last): File "<pyshell#1>", line 1, in <module> checkIfEmpty("table-Name") File "C:\Users\... cursor.execute(qStr) pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near '-'. (102) (SQLExecDirectW)")
    • 我不确定“table-Name”是否有效。如果在您的控制范围内,请将其更改为更好的名称,例如 table_name 或其他名称。我认为问题在于您的表名中的“-”。
    • 我无法改变这一点,数据库中有几个表,名称为“table-name”的破折号是示例,我有“table-le-name”格式的表格(2 个破折号)。数据库有超过 400 个表
    • 那么你需要在破折号出现的任何地方使用[]。查看修改
    【解决方案2】:

    现在你也可以这样写:

    qStr = f"SELECT * FROM [{tableName}]"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多