Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Peewee:如何更新特定字段?_Database_Python 2.7_Orm_Peewee - Fatal编程技术网

Database Peewee:如何更新特定字段?

Database Peewee:如何更新特定字段?,database,python-2.7,orm,peewee,Database,Python 2.7,Orm,Peewee,我正在使用Peewee处理数据库。我有一个用户表,表中有3个字段:用户名,密码和上次登录。当用户登录到系统时,我想更新last\u login。我使用了以下代码行: from peewee import * import datetime class User(Model): username = CharField(unique=True) password = CharField() last_login = DateTimeField(default=dateti

我正在使用
Peewee
处理数据库。我有一个
用户
表,表中有3个字段:
用户名
密码
上次登录
。当用户登录到系统时,我想更新
last\u 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仅更新上次登录字段?

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

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()
时,只能使用
参数

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

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()
但是,如果要执行此操作,应执行原子更新:

User.update({User.last_login: datetime.datetime.now()}).where(User.username == 'whatever').execute()
u.save()
替换为:

u.save(only=[User.last_login])
正如政府所说:

仅(列表)–要持久化的字段列表–提供时,只会持久化给定的字段


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

我不想更改密码。你的代码改变了它,有什么区别?哪种方法更好?