代码之家  ›  专栏  ›  技术社区  ›  Reza Fallahpour

Peewee:如何更新特定字段?

  •  4
  • Reza Fallahpour  · 技术社区  · 8 年前

    我正在使用 Peewee User 包含3个字段的表: username , password last_login 。当用户登录到我想要更新的系统时 上次登录 .我使用了以下代码行:

    from peewee import *
    import datetime
    
    class User(Model):
        username = CharField(unique=True)
        password = CharField()
        last_login = DateTimeField(default=datetime.datetime.now())
    
        class Meta:
            database = MySQLDatabase('mydb', user='root', charset='123456')
    
    
    u=User(username="user1", last_login=datetime.datetime.now())
    u.save()
    

    ,之后将被覆盖 u.save() 被称为。我应该如何强制peewee只更新 上次登录

    4 回复  |  直到 8 年前
        1
  •  7
  •   Max SuB    8 年前

    代替 u.save() 使用:

    u.save(only=[User.last_login])
    

    API's documentation 说:

    仅(列表) 要持久化的字段列表。如果提供,则只会持久化给定的字段。

        2
  •  2
  •   coleifer    8 年前

    您可以使用 only save() http://docs.peewee-orm.com/en/latest/peewee/api.html#Model.save

    当用户登录到系统时,我想更新last_登录。我使用了以下代码行:

    User.update({User.last_login: datetime.datetime.now()}).where(User.username == 'whatever').execute()
    
        3
  •  1
  •   Nir Alfasi    8 年前

    以下代码将演示如何在数据库中创建、获取和更新记录:

    now = datetime.datetime.now()
    
    # create a user
    u = User.create(username="user1", password="bla", last_login=now)
    # now `u` has your user, you can do: print u.username, u.password, u.last_login
    
    # get an existing user from the db
    u = User.get(User.username == "user1")
    print u.username, u.password, u.last_login
    
    sleep(1)
    now = datetime.datetime.now()
    
    # update an existing user
    u = User.update(password="blabla", last_login=now).where(User.username == "user1")
    u.execute()
    
        4
  •  0
  •   ouflak    4 年前

    如果只想保存修改过的字段,可以使用以下方法:

    class User(Model):
        username = CharField(unique=True)
        password = CharField()
        last_login = DateTimeField(default=datetime.datetime.now())
    
        class Meta:
            database = MySQLDatabase('mydb', user='root', charset='123456')
    
            # This method saves only modefied fields
            only_save_dirty = True
    
    u=User(username="user1", last_login=datetime.datetime.now())
    u.save()