Python-peewee获得最后保存的行

时间:2014-07-10 11:23:38

标签: python orm peewee

有什么方法可以在使用peewee及其所有属性的同时获取数据库中最后保存的行? 假设我这样做:

user = User.create(
    email = request.json['email'],
    nickname = request.json['nickname'],
    password = request.json['password'],
    salt = "salt"
)

但是user.idNone,我可以获得的唯一属性是上面指定的属性。 我可以调用select()方法,但是有没有更快的方法?

由于

3 个答案:

答案 0 :(得分:12)

User.select().order_by(User.id.desc()).get()

这将使最后创建的用户假设ID是一个自动递增的整数(默认值)。

如果您想获取最后一个已保存的用户,则需要添加时间戳以指示用户何时保存。


更新

Peewee现在也支持Postgres数据库的RETURNING子句。您可以为任何RETURNINGINSERTUPDATE查询添加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