【问题标题】:Python Pyodbc - Invalid Syntax with SQLPython Pyodbc - SQL 语法无效
【发布时间】:2017-09-07 08:38:24
【问题描述】:

我正在使用 Pyodbc 从我们的内部数据库中提取一些数据,并使用以下在 SQL Server Management Studio 中完美运行的 SQL。

'SELECT GrantInformation.GrantRefNumber, Count(GrantResearchTopic.PrimaryInd) AS CountOfPrimaryInd 
FROM GrantInformation 
LEFT JOIN GrantResearchTopic ON GrantInformation.GrantRefNumber = GrantResearchTopic.GrantRefNumber 
WHERE ((GrantResearchTopic.PrimaryInd)='True')  
GROUP BY GrantInformation.GrantRefNumber;'

由于某种原因,如果我删除 WHERE 语句,SQL 拉取工作,但如果我把它留在里面,我会得到“无效的语法”,尽管我说过 SQL 在 SQLSMS 中工作正常。

我尝试在 true 周围使用双引号,但出现以下错误:

ProgrammingError: ('42S22', "[42S22] [Microsoft][ODBC SQL Server Driver][SQL Server]Invalid column name 'True'. (207) (SQLExecDirectW)")

有什么想法吗?

编辑: 问题已解决。我没有在我的 SQL 语句中使用双引号,因此它无法识别 True 语句周围的单引号。使用 1 就像不使用引号一样工作,并且在语句周围使用双引号也可以工作,因为它可以识别 'True' 周围的单引号。谢谢大家。

【问题讨论】:

    标签: python sql pyodbc


    【解决方案1】:

    你的整个 SQL 语句应该用双引号而不是单引号,然后 true 可以保留在单引号中。

    【讨论】:

    • 是的,这也有效。那是一个简单的错误!谢谢马特!
    【解决方案2】:

    我解决了一个类似的问题,用1(不带引号)替换'True'

    【讨论】:

    • 完美,是的,将其更改为 1 解决了问题。奇怪的是,我之前用 Pyodbc 做过很多 SQL 语句,以前从来没有遇到过这个问题,一定是数据库的问题!
    【解决方案3】:

    'True'(由单引号或双引号括起来的 True)是字符串,不能与布尔值进行比较。 在 sql 中使用 1 或 TRUE(均不带引号且 TRUE 不区分大小写)作为布尔值 true 将起作用。

    【讨论】:

    • 1 对我有用,TRUE 没有,但不管怎样,事实上我没有双引号导致问题的 SQL 字符串。感谢您的帮助! :)
    • 很可能您的“PrimaryInd”字段有点,而不是布尔值。
    【解决方案4】:

    尝试删除语句末尾的分号

    【讨论】:

    • SQL 语句可以用分号结束。
    • 我尝试删除它,但仍然得到指向 true 语句的相同语法错误:/
    猜你喜欢
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多