bug情境描述

经过查找,SQL Alchemy没有自带ON DUPLICATE KEY UPDATE功能,所以打算手写一个。于是产生了下面的(错误)脑洞…
【SQL Alchemy】AttributeError: '...' object has no attribute 'translate'错误的解决
先按照想要UNIQUE的列查出结果,然后判断:

  • 如果查询有结果,就用新Object的所有列去替换原有Object的所有列
  • 如果查询无结果,就直接db.session.add这个Object

以上方式没有考虑到新的Object可能有些属性(列)没有值(大概是None?或者Null?),直接赋值给旧的Object的话,可能在存储的时候,类型会有问题。所以直接替换每一个属性可能不是好方法,或者需要判断一下是否为空,再给新的Object赋值才可以。

想了一个替代方案:

判断如果有查询结果的话,直接删除原有的Object,然后add整个新Object:
【SQL Alchemy】AttributeError: '...' object has no attribute 'translate'错误的解决

相关文章: