¿Alguien sabe cuál es la principal diferencia entre session.commit()
y session.flush()
en SQLAlchemy?¿Cuál es la diferencia entre session.commit() y session.flush()?
Respuesta
Aquí hay algunas citas relevantes del documentation.
ras:
Cuando el
Session
se utiliza con su configuración predeterminada, el rubor paso es casi siempre se realiza de forma transparente. Específicamente, el color ocurre antes de que se emita cualquier consulta individual, así como dentro de la llamadacommit()
antes de que se haya confirmado la transacción.
comprometen:
commit()
se utiliza para confirmar la transacción actual. Siempre emiteflush()
de antemano para enjuagar cualquier estado restante en la base de datos; este es independiente de la configuración "autoflush". Si no hay ninguna transacción presente , se genera un error. Tenga en cuenta que el comportamiento predeterminado de la sesión es que una "transacción" siempre está presente; este comportamiento puede desactivarse configurandoautocommit=True
. En el modo de confirmación automática, se puede iniciar una transacción llamando al métodobegin()
.
Directamente desde the documentation:
commit()
se utiliza para confirmar la transacción actual. Siempre emiteflush()
de antemano para enjuagar cualquier estado restante a la base de datos.
La forma más fácil que sé cómo explicar lo que ellos hacen es que usted acaba de mostrar, mediante echo=True
:
>>> session.flush()
BEGIN (implicit)
INSERT INTO users (username, password) VALUES (?, ?)
('alice', None)
>>> session.commit()
COMMIT
>>>
flush()
hace que los datos sean enviados a la base de datos. commit()
provoca un COMMIT
, que le dice a la base de datos que conserve los datos que se acaban de enviar. Como otros han declarado, commit()
también causará que ocurra un flush()
, si es necesario.
Aunque las respuestas anteriores son correctas, la característica más útil de flush es aplicar los cambios realizados a la tabla en la base de datos en el objeto afectado en el código. He aquí un ejemplo, Supongamos que un usuario se registre y se quiere dar vuelta a su identificación,
u = User(name,address,phone) #id is autogenerated
session.add(u)
session.commit() #calls flush beforehand, but we need it after the commit
session.flush() #updates the objects of the session
print(u.id) #id field of the User object updated after the flush
Usted no tiene que consultar de nuevo para obtener su Identificación !!Espero que esto ayude
flush()
va a sincronizar su base de datos con el estado actual del objeto/los objetos almacenados en la memoria pero no se compromete la transacción. Por lo tanto, si recibe una excepción después de llamar alflush()
, la transacción se retrotraerá. Puede sincronizar su base de datos con pequeños fragmentos de datos usandoflush()
en lugar de enviar grandes cantidades de datos a la vez concommit()
y corre el riesgo de obtener una excepciónOut Of Memory
.
commit()
hará que los datos almacenados en la base de datos sean permanentes. No hay forma de que pueda deshacer su transacción una vez que elcommit()
sea exitoso.
- 1. ¿Cuál es la diferencia entre persist() y merge() en Hibernate?
- 2. ¿Cuál es la diferencia entre {0} y ""?
- 3. Cuál es la diferencia entre = y: =
- 4. ¿Cuál es la diferencia entre .ToString (+) y ""
- 5. Cuál es la diferencia entre $ (...) y `...`
- 6. ¿cuál es la diferencia entre:.! y: r !?
- 7. ¿Cuál es la diferencia entre ".equals" y "=="?
- 8. ¿Cuál es la diferencia entre dict() y {}?
- 9. ¿Cuál es la diferencia entre `##` y `hashCode`?
- 10. ¿Cuál es la diferencia entre "$^N" y "$ +"?
- 11. ¿Cuál es la diferencia entre [indefinido] y [,]?
- 12. ¿Cuál es la diferencia entre + = y = +?
- 13. ¿Cuál es la diferencia entre " " y ""?
- 14. Cuál es la diferencia entre $ y jQuery
- 15. OpenGL (ES) - ¿Cuál es la diferencia entre frustum y orto?
- 16. Cuál es la diferencia entre la función() {}() y la función() {}()
- 17. ¿Cuál es la diferencia entre la abstracción y la encapsulación?
- 18. ¿Cuál es la diferencia entre @ y $ y% en MSBuild?
- 19. ¿Cuál es la diferencia entre la vinculación estática y dinámica?
- 20. ¿Cuál es la diferencia entre la sección .got y .got.plt?
- 21. ¿Cuál es la diferencia entre el colado y la coerción?
- 22. ¿cuál es la diferencia entre el complemento y la biblioteca?
- 23. ¿Cuál es la diferencia entre el casting y la conversión?
- 24. ¿Cuál es la diferencia entre WPF y la aplicación Silverlight?
- 25. ¿Cuál es la diferencia entre uno mismo y la ventana?
- 26. ¿Cuál es la diferencia entre CookieContainer y la colección Response.Cookies?
- 27. ¿Cuál es la diferencia entre la relación Composición y Asociación?
- 28. ¿cuál es la diferencia entre el material y la textura?
- 29. ¿Cuál es la diferencia entre el marco y la arquitectura?
- 30. ¿Cuál es la diferencia entre la carpeta vim72 y vimfiles?
Qué aspecto de la documentación ("lavado" y "comprometerse" en http://www.sqlalchemy.org/docs/orm/session.html#flushing) usted se encuentra el claro ? – NPE