Python Pyodbc - SQL语法无效

时间:2017-09-07 08:38:24

标签: python sql pyodbc

我正在使用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拉有效,但是如果我把它放进去,我会得到'INVALID SYNTAX',尽管我说SQL在SQLSMS中正常工作。

我尝试在true附近使用双引号,但得到以下错误:

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

有什么想法吗?

修改 问题已解决。我没有在我的SQL语句中使用双引号,所以它不会识别True语句周围的单引号。使用1作为wasnt使用引号,并在语句周围使用双引号也工作,因为它然后识别'True'周围的单引号。谢谢大家。

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:2)

我解决了将df = data.frame(id = rep(1:4, each = 4), event = as.factor(c("registration", "inspection", "inspection", "deregistration", "registration", "inspection", "deregistration", "inspection", "registration", "deregistration","inspection", "inspection", "registration", "inspection", "inspection", "deregistration"))) 替换为'True'(不带引号)的类似问题。

答案 2 :(得分:2)

'True'(由单引号或双引号括起的真值)是一个字符串,不能与布尔值进行比较。 在sql中使用1或TRUE(两者都没有引号而TRUE不区分大小写),因为布尔值为true。

答案 3 :(得分:-1)

尝试在语句末尾删除分号