2011-09-19 12 views

Respuesta

15

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 llamada commit() antes de que se haya confirmado la transacción.

comprometen:

commit() se utiliza para confirmar la transacción actual. Siempre emite flush() 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 configurando autocommit=True. En el modo de confirmación automática, se puede iniciar una transacción llamando al método begin().

4

Directamente desde the documentation:

commit() se utiliza para confirmar la transacción actual. Siempre emite flush() de antemano para enjuagar cualquier estado restante a la base de datos.

9

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.

3

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

0

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 al flush(), la transacción se retrotraerá. Puede sincronizar su base de datos con pequeños fragmentos de datos usando flush() en lugar de enviar grandes cantidades de datos a la vez con commit() y corre el riesgo de obtener una excepción Out 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 el commit() sea exitoso.

Fuente: https://stackoverflow.com/a/26976077/4115031

Cuestiones relacionadas