使用peewee更新动态确定的字段

时间:2014-03-17 07:49:48

标签: python mysql peewee

我有一个像以下一样的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状态。在这种情况下,我可以在单独的类实例中获取新旧数据,手动创建属性列表并逐一进行比较,在必要时进行更新,最后将结果保存到数据库中。但是,我觉得可能有更好的方法来处理它,它也可以用于任何具有任何属性的类。有吗?

1 个答案:

答案 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 = ?

使用脚本语言设置参数值 如果参数与旧值匹配,则默认情况下不会执行更新。