2010-04-11 12 views
6

sto usando SQLAlchemyOttenere ultimo inserto id con SQLAlchemy

import hashlib 
import sqlalchemy as sa 
from sqlalchemy import orm 

from allsun.model import meta 


t_user = sa.Table("users",meta.metadata,autoload=True) 

class Duplicat(Exception): 
pass 
class LoginExistsException(Exception): 
pass 
class EmailExistsException(Exception): 
pass 

class User(object): 
""" 
def __setattr__(self, key, value): 
    if key=='password' : 
    value=unicode(hashlib.sha512(value).hexdigset()) 
    object.__setattr__(self,key,value) 
""" 
def loginExists(self): 
    try: 
    meta.Session.query(User).filter(User.login==self.login).one() 
    except orm.exc.NoResultFound: 
    pass 
    else: 
    raise LoginExistsException() 

def emailExists(self): 
    try: 
    meta.Session.query(User).filter(User.email==self.email).one() 
    except orm.exc.NoResultFound: 
    pass 
    else: 
    raise EmailExistsException() 


def save(self): 
    meta.Session.begin() 
    meta.Session.save(self) 
    try: 
    meta.Session.commit() 
    except sa.exc.IntegrityError: 
    raise Duplicat() 

Come posso ottenere l'ultimo ID inserito quando chiamo:

user = User() 
user.login = request.params['login'] 
user.password = hashlib.sha512(request.params['password']).hexdigest() 
user.email = request.params['email'] 
user.save() 

risposta

12

È possibile accedere a user.id (o qualsiasi altro nome si utilizza per il campo chiave primaria autoincremato) dopo aver salvato l'oggetto user. SQLAlchemy riempie automaticamente i campi assegnati dal database.

Problemi correlati