有什么方法可以在使用peewee及其所有属性的同时获取数据库中最后保存的行? 假设我这样做:
user = User.create(
email = request.json['email'],
nickname = request.json['nickname'],
password = request.json['password'],
salt = "salt"
)
但是user.id
是None
,我可以获得的唯一属性是上面指定的属性。
我可以调用select()
方法,但是有没有更快的方法?
由于
答案 0 :(得分:12)
User.select().order_by(User.id.desc()).get()
这将使最后创建的用户假设ID是一个自动递增的整数(默认值)。
如果您想获取最后一个已保存的用户,则需要添加时间戳以指示用户何时保存。
更新
Peewee现在也支持Postgres数据库的RETURNING
子句。您可以为任何RETURNING
,INSERT
或UPDATE
查询添加DELETE
子句。查看文档:
答案 1 :(得分:5)
除了重新查询数据库之外,还有以下几种方法:
u = User(email="..", nickname="..", password="..", salt="..")
u.save()
# at this point, peewee inserted the entry in the DB,
# and updated all relevant fields (including the ID).
# For example, you can do the following:
print "ID of last-created user: %d" % u.id
对于复杂的多线程系统,我认为这是一个更好的选择。
答案 2 :(得分:0)
我猜你的User
模型看起来像这样:
class User(Model):
id = IntegerField(primary_key=True)
email = TextField(unique=True)
nickname = TextField()
password = TextField()
salt = TextField()
但是除非你使用它的PrimaryKeyField类,否则peewee不知道如何处理自动增量字段:
class User(Model):
id = PrimaryKeyField()
email = TextField(unique=True)
nickname = TextField()
password = TextField()
salt = TextField()
在我能找到的任何地方都没有记录。 Source