【问题标题】:An expression of non-boolean type specified in a context where a condition is expected, near ')' - Pyodbc and SQL Server在预期条件的上下文中指定的非布尔类型的表达式,靠近 ')' - Pyodbc 和 SQL Server
【发布时间】:2020-01-02 23:37:21
【问题描述】:

我正在尝试使用 Python 3.7 和 pyodbc 更新数据库中的一些值,但不断收到错误 Error - An expression of non-boolean type specified in a context where a condition is expected, near ')'

    def UpdateSQL(self,shift,conn):

        cursor=conn.cursor()
        sql="""
        UPDATE [DB].[dbo].[ZSB_Datapool_Test]
        SET AssemblyDateTime=GETDATE(),Shift_Ass=?,User_Ass='mtp1'
        WHERE(
        SELECT TOP 1 *
        FROM [DB].[dbo].[ZSB_Datapool_Test]
        WHERE TotalResult='OK'
        AND ID=?
        AND Machinenr=?
        And Serialnr=?
        )
        """
        cursor.execute(sql,shift,self.scanID,self.scanMa,self.scanSn)
        cursor.close()

文件“c:\Users\mmai\Documents\Python2\Scanner\Scanner.py”,第 228 行, 在更新 SQL cursor.execute(sql,shift,self.scanID,self.scanMa,self.scanSn) pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC SQL 服务器驱动程序][SQL Server]In der Nähe von ')' wurde ein nicht boolescher Ausdruck in einem Kontext angegeben, in dem eine Bedingung 厄瓦特线。 (4145) (SQLExecDirectW); [42000] [微软] [ODBC SQL 服务器驱动][SQL Server]Anweisung(en) konnte(n) nicht vorbereitet 韦尔登(8180)")

【问题讨论】:

  • 看看你的 where 子句。您在那里有一个子查询,但您基本上是在说“Where MySubQuery”。你错过了等式的另一边。其中 MySubQuery = X
  • 谢谢WHERE EXISTS(..) 成功了:)

标签: python sql sql-server pyodbc


【解决方案1】:

WHERE 旁边添加EXIST 解决了它。谢谢肖恩·兰格。

【讨论】:

  • 有趣的是 params 在未绑定在元组或列表中时有效:cursor.execute(sql,[shift, self.scanID, self.scanMa, self.scanSn])
  • @Parfait - 那是pyodbc feature
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多