Tengo una clase Item
cuya id
es una clave principal y se genera automáticamente. Ahora leo datos de otra fuente externa, creo un objeto Item
y necesito verificar si este objeto ya está presente en mi tabla items
. ¿Cómo lo hago?SQLAlchemy: compruebe si el objeto ya está presente en la tabla
Respuesta
Puede buscar elementos que tengan los mismos atributos y comprobar si el recuento es mayor que cero.
if session.query(Item.id).filter(Item.email==newItem.email,
Item.type==newItem.type).count() > 0:
// item exists
El '> 0' es redundante ya que count() devuelve cero si no se encuentran coincidencias y un entero positivo de lo contrario. – kalu
@kalu: "Explícito es mejor que implícito". - El Zen de Python –
El uso del recuento hace que la base de datos haga más trabajo de lo que necesita. Vea mi respuesta a continuación para un método eficiente. – Salami
Usted podría intentar algo similar a esto:
from sqlalchemy import exc
try:
session.add(item)
session.commit()
except exc.IntegrityError:
session.rollback()
print 'This item fails one of the unique/foreign key checks!'
except:
print 'There was another error'
raise
else:
print 'Everything is OK'
Esto tiene el problema de que se actúa sobre la comisión, y luego se deshace ...
Otra opción, si se puede comprobar las propiedades individualmente, entonces esto podría funcionar:
session.query(Item).filter_by(x=item.x, y=item.y).count() == 0
La forma más eficiente es utilizar exists()
q = session.query(Item.id).filter(Item.email==email)
session.query(q.exists()).scalar() # returns True or False
- 1. Compruebe si la consola está presente
- 2. NSMutableArray compruebe si el objeto ya existe
- 3. Compruebe si el archivo ya está abierto
- 4. cómo detectar si el modo de acción ya está presente
- 5. Compruebe si objeto es una instancia de modelo sqlalchemy
- 6. C# Determinar si el objeto está presente en una imagen
- 7. compruebe si la variable de entorno ya está configurada
- 8. Cómo cambiar el valor si la tabla ya está dibujada
- 9. Django: compruebe si ya existe un objeto antes de agregar
- 10. Compruebe si el objeto está en una lista de objetos
- 11. SqlAlchemy: crea un objeto si no existe ya?
- 12. Compruebe si existe tabla
- 13. Eliminar el registro principal si el hijo no está presente
- 14. compruebe si NSNumber está vacío
- 15. jQuery: compruebe si la fila de la tabla que contiene ciertos valores ya existe
- 16. Hibernar: compruebe si existe el objeto
- 17. compruebe si el objeto se crea o no en delphi
- 18. Django compruebe si el campo está en blanco?
- 19. Compruebe si la dirección IP está en el rango privado
- 20. Compruebe si la cadena está vacía
- 21. OSX: compruebe si la pantalla está bloqueada
- 22. ¿El objeto ya está inicializado en la declaración?
- 23. compruebe si la 1ª opción está seleccionada
- 24. Compruebe si "exec" está deshabilitado
- 25. Python compruebe si el objeto está en la lista de objetos
- 26. Cómo detectar si un micrófono está presente
- 27. Compruebe si existe un objeto en VBScript
- 28. Smarty: compruebe si la variable está en la matriz
- 29. Mangosta: compruebe si el objeto es un objeto de mangosta
- 30. Compruebe si el tiempo frontal está habilitado en el dispositivo
¿Es un escenario '' get_or_create''? Si es así: http://stackoverflow.com/questions/2546207/does-sqlalchemy-have-an-equivalent-of-djangos-get-or-create –
@DemianBrecht, gracias por la respuesta, pero no, no es . – missingfaktor
@missingfaktor ¿cómo sabes si ya existe? Basado en la clave principal? ¿O alguna otra llave única? – jadkik94