pyodbc“-”附近的语法不正确。(102)

6

我试图从包含“-”破折号符号的表中选择所有数据,但是我得到了错误。

    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 [表名],在Microsoft SQL Management Studio中使用复制粘贴可以正常工作,但是从Python控制台无法正常工作。

qStr = 'SELECT * FROM "' + tableName + '"也是同样的情况。

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

2个回答

10

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

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', "[Microsoft][ODBC SQL Server Driver][SQL Server]Incorrect syntax near '-'. (102) (SQLExecDirectW)") - Energizem
我不确定 "table-Name" 是否有效。如果可以的话,请将其更改为更好的名称,例如 table_name 或其他名称。我认为问题出在您的表名中的 '-' 上。 - Rahul
我无法更改这个,数据库中有几个带有短横线名称的表,"table-name"是一个例子,我有一个以"tab-le-name"格式(2个短横线)的表。数据库有超过400个表。 - Energizem
1
然后您需要在破折号出现的地方使用 []。请参见编辑。 - Rahul

0

现在你也可以这样写:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接