2010-08-10 9 views

Respuesta

4

no. Funcionará bien.

+0

Muchas gracias :) – mauzepeda

+1

¿Puedes citar alguna documentación de SQLAlchemy que sugiera que esto estaría bien? – DuneBug

+1

@DuneBug No veo por qué sería un problema. Sqlalchemy en sí mismo no anula esos métodos especiales para la base declarativa. – nosklo

2

Tal vez, dependiendo de la implementación de la función de comparación.

Usted tiene que tener cuidado al usar __eq__ o __cmp__ para comparar con el objeto other, porque SQLAlchemy puede comparar su objeto con algunos símbolos como NEVER_SET que no tienen el mismo tipo. Echar un vistazo a este método SQLAlchemy:

def get_all_pending(self, state, dict_): 
    if self.key in dict_: 
     current = dict_[self.key] 
     if current is not None: 
      ret = [(instance_state(current), current)] 
     else: 
      ret = [(None, None)] 

     if self.key in state.committed_state: 
      original = state.committed_state[self.key] 
      if original not in (NEVER_SET, PASSIVE_NO_RESULT, None) and \ 
       original is not current: 

       ret.append((instance_state(original), original)) 
     return ret 
    else: 
     return [] 

La línea original not in (NEVER_SET, PASSIVE_NO_RESULT, None) puede generar un error si la comparación no comprueba la igualdad de los tipos primero, o de la existencia de los campos que se utilizan en la comparación

Como solución, debe tener en cuenta los diferentes tipos.

También evite anular __cmp__ y use rich comparison operators instead.

+0

¡Buena captura! Esto es importante. –

Cuestiones relacionadas