Peewee :如何更新特定字段?
Peewee : How to update specific fields?
我正在使用 Peewee
来处理数据库。我有一个包含 3 个字段的 User
表:username
、password
和 last_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()
后它会被覆盖。我应该如何强制 peewee 只更新 last_login
字段?
以下代码将演示如何在数据库中创建、获取和更新记录:
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()
您可以在调用 save()
时使用 only
参数。 http://docs.peewee-orm.com/en/latest/peewee/api.html#Model.save
When a user login to the system i want to update last_login. I've use following lines of code:
如果你想这样做,你应该做一个原子更新,但是:
User.update({User.last_login: datetime.datetime.now()}).where(User.username == 'whatever').execute()
将u.save()
替换为:
u.save(only=[User.last_login])
正如 API's documentation 所说:
only (list) – A list of fields to persist – when supplied, only the given fields will be persisted.
因此您应该指定要更改的字段列表。
如果只想保存修改过的字段,可以使用以下方法:
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()
我正在使用 Peewee
来处理数据库。我有一个包含 3 个字段的 User
表:username
、password
和 last_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()
后它会被覆盖。我应该如何强制 peewee 只更新 last_login
字段?
以下代码将演示如何在数据库中创建、获取和更新记录:
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()
您可以在调用 save()
时使用 only
参数。 http://docs.peewee-orm.com/en/latest/peewee/api.html#Model.save
When a user login to the system i want to update last_login. I've use following lines of code:
如果你想这样做,你应该做一个原子更新,但是:
User.update({User.last_login: datetime.datetime.now()}).where(User.username == 'whatever').execute()
将u.save()
替换为:
u.save(only=[User.last_login])
正如 API's documentation 所说:
only (list) – A list of fields to persist – when supplied, only the given fields will be persisted.
因此您应该指定要更改的字段列表。
如果只想保存修改过的字段,可以使用以下方法:
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()