我试图在PostgreSQL中与File "<ipython-input-211-c755485ed830>", line 7
except: continue
^
IndentationError: unexpected unindent
一起使用where子句,并且它不会触发。这是我用python编写的SQL查询。我正在使用psycopg2:
insert on conflict
这是我的python代码,实际上填充了这些python变量:
INSERT INTO city_guide_stat AS stat (city_guide_id, {cols})
VALUES {values}
ON CONFLICT (city_guide_id)
DO UPDATE SET ({update_cols}) = ({update_values})
WHERE stat.city_guide_id = excluded.city_guide_id
AND md5(({dest_hash_cols})::TEXT)<>md5(({src_hash_cols})::TEXT)
我面临的问题是我的where子句未触发。
答案 0 :(得分:1)
比较行的文本表示形式的md5是不可靠的,因为输入文本可能与相等的行的输出表示形式不同,例如对于数值:
md5('1.0') <> md5('1') while (1.0) = (1)
如果所有列类型都具有相等运算符,则比较行:
INSERT INTO city_guide_stat AS stat (city_guide_id, {cols})
VALUES {values}
ON CONFLICT (city_guide_id)
DO UPDATE SET ({update_cols}) = ({update_values})
WHERE ({dest_hash_cols}) is distinct from ({src_hash_cols})
否则,您根本无法做到这一点(或仅比较同类产品)。
还请注意
WHERE stat.city_guide_id = excluded.city_guide_id
是多余的。