无法找到从未知到布尔错误的转换函数

Failed to find conversion function from unknown to boolean error

query = """UPDATE table SET last_tracked = %s, being_tracked = %s WHERE(
                SELECT 'X' FROM temp_table
                WHERE table.selected_id = temp_table.selected_id);"""
cur.execute(query, [datetime.utcnow().isoformat(' ').split('.')[0] + ' z', True])

上面的python/psycopg2代码给出了以下错误:

ERROR:  failed to find conversion function from unknown to boolean
STATEMENT:  UPDATE table 
            SET last_tracked = '2015-07-02 20:32:00 z', being_tracked = true 
            WHERE(
                SELECT 'X' FROM temp_table
                WHERE table.selected_id = temp_table.selected_id);

以下代码运行良好:

query = """UPDATE table SET being_tracked = %s
              WHERE NOT EXISTS(
                  SELECT 'X' FROM temp_table
                  WHERE table.selected_id = temp_table.selected_id);"""
cur.execute(query, [False])

我试图只更新 table 中已经存在的行。我在这里做错了什么?

您在 WHERE 谓词中遗漏了 EXISTS:

query = """UPDATE table SET last_tracked = %s, being_tracked = %s WHERE( SELECT 'X' 从 temp_table WHERE table.selected_id = temp_table.selected_id);"""

应该是:

query = """UPDATE table SET last_tracked = %s, being_tracked = %s WHERE EXISTS( SELECT 'X' 从 temp_table WHERE table.selected_id = temp_table.selected_id);"""

不?