Peewee:如何更新特定领域?

时间:2017-07-20 07:29:36

标签: database python-2.7 orm peewee

我使用Peewee来处理数据库。我有一个包含3个字段的User表:usernamepasswordlast_login。当用户登录系统时,我想更新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()

虽然我没有为password指定任何值,但在u.save()被调用后会被覆盖。我应该如何强迫小便只更新last_login字段?

3 个答案:

答案 0 :(得分:5)

u.save()替换为:

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

正如API's documentation所说:

  

only(list) - 要保留的字段列表 - 提供时,只保留给定字段。

因此,您应指定要更改的字段列表。

答案 1 :(得分:2)

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

.left-form {
    text-align: center; /* default */
}

@media (min-width: 768px) { /* only "big" screens */
    .left-form { /* instead of label */
        text-align: right;
    }
}

答案 2 :(得分:0)

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

  

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

如果你想这样做,你应该进行原子更新,但是:

User.update({User.last_login: datetime.datetime.now()}).where(User.username == 'whatever').execute()