2010-04-11 21 views
6

estoy usando SQLAlchemyúltima Identificación del inserto 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() 

¿Cómo puedo conseguir el último ID insertado cuando llamo:

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

Respuesta

12

Puede acceder user.id (o el nombre que utiliza para el campo clave principal autoincrenado) después de guardar el objeto user. SQLAlchemy llena automáticamente los campos asignados por la base de datos.

Cuestiones relacionadas