【问题标题】:Failed to find conversion function from unknown to boolean error找不到从未知到布尔错误的转换函数
【发布时间】:2015-07-02 22:09:46
【问题描述】:
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])

我正在尝试仅更新表中已存在的行。我在这里做错了什么?

【问题讨论】:

  • last_tracked属性的类型是什么?
  • 带时区的时间戳

标签: python sql postgresql psycopg2


【解决方案1】:

您在 WHERE 谓词中缺少 EXISTS:

query = """UPDATE table SET last_tracked = %s, being_tracked = %s WHERE( 从 temp_table 中选择“X” WHERE table.selected_id = temp_table.selected_id);"""

应该是:

query = """UPDATE table SET last_tracked = %s, being_tracked = %s WHERE EXISTS( 从 temp_table 中选择“X” WHERE table.selected_id = temp_table.selected_id);"""

不要?

【讨论】:

  • 哎呀!我对 SQL 很陌生,不知道你必须把 EXISTS 放在那里。问题解决了。
猜你喜欢
  • 2014-10-01
  • 2013-08-07
  • 1970-01-01
  • 2011-02-25
  • 1970-01-01
  • 2012-09-03
  • 2014-05-12
  • 1970-01-01
相关资源
最近更新 更多