2014-07-10 13 views
5

c'è un modo per ottenere l'ultima riga salvata nel database mentre si usa peewee con tutti i suoi attributi? Diciamo che faccio questo:Python-peewee ottiene l'ultima riga salvata

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

Ma user.id è None e gli unici attributi posso ottenere sono quelli di cui sopra. Potrei chiamare il metodo select() ma non c'è un modo più veloce?

Grazie

risposta

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

Questo otterrà l'ultimo creato dall'utente assumendo gli ID è un numero intero incremento automatico (impostazione predefinita).

Se si desidera ottenere l'ultimo utente salvato, è necessario aggiungere un timestamp per indicare quando l'utente viene salvato.


Aggiornamento:

Peewee anche ora supporta RETURNING clausola per il database Postgres. È possibile aggiungere una clausola RETURNING a qualsiasi INSERT, UPDATE o DELETE query. Controllare i documenti:

2

Invece di re-interrogazione DB, un'alternativa è la seguente:

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 

Per sistemi multi-thread complesse , Penso che questa sia un'alternativa migliore.

+1

Peewee ora supporta anche 'RETURNING' (solo postgres), che funziona su query INSERT, UPDATE e DELETE. [Docs here] (http://docs.peewee-orm.com/en/latest/peewee/querying.html#returning-clause). – coleifer

+0

Questa dovrebbe essere la risposta accettata. –

0

sto cercando di indovinare il vostro modello User assomiglia a questo:

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

Ma Peewee non sa come gestire i campi autoincrementing a meno di utilizzare la sua classe PrimaryKeyField:

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

Questo wasn' Ho documentato ovunque potessi trovare. Source.

Problemi correlati