Aquí está mi código:

import cx_Oracle

conn = cx_Oracle.connect(usr, pwd, url)
cursor = conn.cursor()
cursor.execute("UPDATE SO SET STATUS='PE' WHERE ID='100'")
conn.commit()

Si puedo quitar el conn.commit(), la tabla no se actualiza. Pero para las instrucciones select, no necesito que conn.commit(). Me pregunto por qué?

pasé 6 horas y 25 minutos tratando de averiguar por qué los datos no se actualizan en la base de datos para que yo pueda ver este post y me doy cuenta de que se olvidó de agregar conn.commit().

OriginalEl autor Tshepang | 2010-05-17

3 Comentarios

  1. 17

    La DB-API especificación requiere que la conexión a la base de datos comienza una nueva transacción, de forma predeterminada. Usted debe commit para confirmar los cambios que realice, o rollback para deshacerse de ellos.

    Tenga en cuenta que si la base de datos admite una auto-commit, este debe ser desactivado inicialmente.

    Puro SELECT declaraciones, ya que nunca hacer cambios a la base de datos, no tiene que tener sus cambios cometido.

    OriginalEl autor bobince

  2. 6

    cometer se utiliza para indicar la base de datos para guardar todos los cambios en la transacción actual.

    Seleccione no cambia los datos así que no hay nada para ahorrar y por lo tanto nada para cometer

    Ver wikipedia para las transacciones

    OriginalEl autor Mark

  3. 1

    Otros han explicado por qué un commit no es necesario en una instrucción SELECT. Yo sólo quería señalar que usted podría utilizar el autocommit propiedad de la Conexión objeto de evitar tener que ejecutar manualmente comprometerse:

    import cx_Oracle
    
    with cx_Oracle.connect(usr, pwd, url) as conn:
        conn.autocommit = True
        cursor = conn.cursor()
        cursor.execute("UPDATE SO SET STATUS='PE' WHERE ID='100'")
        cursor.close()

    Esto es especialmente útil cuando se tienen varios INSERT, UPDATE y DELETE dentro de la misma conexión.

    OriginalEl autor Erik Anderson

Dejar respuesta

Please enter your comment!
Please enter your name here