我有一个像以下一样的peewee模型:
class Parrot(Model):
is_alive = BooleanField()
bought = DateField()
color = CharField()
name = CharField()
id = IntegerField()
我从用户那里获取这些数据,并在(MySQL)数据库中查找相应的id。我现在要做的是更新那些未设置/为空的属性。例如,如果新数据具有以下属性:
is_alive = True
bought = '1965-03-14'
color = None
name = 'norwegian'
id = 17
并且数据库中的数据包含:
is_alive = False
bought = None
color = 'blue'
name = ''
id = 17
我想更新已购买的日期和名称(未设置或为空),但不更改is_alive状态。在这种情况下,我可以在单独的类实例中获取新旧数据,手动创建属性列表并逐一进行比较,在必要时进行更新,最后将结果保存到数据库中。但是,我觉得可能有更好的方法来处理它,它也可以用于任何具有任何属性的类。有吗?
答案 0 :(得分:0)
MySQL 解决方案:
UPDATE my_table SET
bought = ( case when bought is NULL OR bought = '' ) then ? end )
, name = ( case when name is NULL OR name = '' ) then ? end )
-- include other field values if any, here
WHERE
id = ?
使用脚本语言设置参数值 如果参数与旧值匹配,则默认情况下不会执行更新。