Python-peewee получить последнюю сохраненную строку

есть ли способ получить последнюю сохраненную строку в базе данных при использовании peewee со всеми ее атрибутами? Допустим, я делаю это:

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

но user.id is None и единственными атрибутами, которые я могу получить, являются указанные выше. Я мог бы позвонить select() метод, но нет ли более быстрого способа?

спасибо

3 ответов


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

это приведет к тому, что последний созданный пользователь будет считать идентификаторы автоматически увеличивающимся целым числом (по умолчанию).

если вы хотите получить последнюю спас пользователь, вам нужно добавить метку времени, чтобы указать, когда пользователь будет сохранен.


обновление:

Peewee также теперь поддерживает RETURNING предложение для базы данных Postgres. Вы можете добавить RETURNING пункт для любого INSERT, UPDATE или DELETE запрос. Проверьте docs:


вместо повторного запроса БД, один из вариантов является следующим:

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

для сложных многопоточных систем, я думаю, что это лучшая альтернатива.


Я предполагаю, что ваш User модель выглядит так:

class User(Model):
    id = IntegerField(primary_key=True)
    email = TextField(unique=True)
    nickname = TextField()
    password = TextField()
    salt = TextField()

но peewee не знает, как обрабатывать поля autoincrementing, если вы не используете его класс PrimaryKeyField:

class User(Model):
    id = PrimaryKeyField()
    email = TextField(unique=True)
    nickname = TextField()
    password = TextField()
    salt = TextField()

это не было задокументировано нигде, где я мог найти. источник.