복붙노트

[PYTHON] 업데이트를 수행 할 때 명시 적으로 커밋해야하는 이유는 무엇입니까?

PYTHON

업데이트를 수행 할 때 명시 적으로 커밋해야하는 이유는 무엇입니까?

내 코드는 다음과 같습니다.

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()

conn.commit ()을 제거하면 테이블이 업데이트되지 않습니다. 그러나 select 문에 대해서는 conn.commit ()이 필요하지 않습니다. 나는 왜 궁금한가요?

해결법

  1. ==============================

    1.DB-API 스펙에서는 데이터베이스에 연결하면 기본적으로 새 트랜잭션이 시작됩니다. 변경 사항을 확인하거나 롤백하여 버려야합니다.

    DB-API 스펙에서는 데이터베이스에 연결하면 기본적으로 새 트랜잭션이 시작됩니다. 변경 사항을 확인하거나 롤백하여 버려야합니다.

    순수 SELECT 문은 데이터베이스를 절대로 변경하지 않으므로 변경 사항을 커미트 할 필요가 없습니다.

  2. ==============================

    2.commit은 현재 트랜잭션의 모든 변경 사항을 저장하도록 데이터베이스에 알리는 데 사용됩니다.

    commit은 현재 트랜잭션의 모든 변경 사항을 저장하도록 데이터베이스에 알리는 데 사용됩니다.

    Select는 아무 데이터도 변경하지 않으므로 저장할 내용이 없으므로 커밋 할 내용이 없습니다.

    거래에 대한 위키 백과보기

  3. ==============================

    3.SELECT 문에서 커밋이 필요하지 않은 이유를 설명하는 다른 문서도 있습니다. 필자는 Connection 객체의 autocommit 속성을 활용하여 수동으로 커밋을 수행하지 않아도된다는 점을 지적하고자했습니다.

    SELECT 문에서 커밋이 필요하지 않은 이유를 설명하는 다른 문서도 있습니다. 필자는 Connection 객체의 autocommit 속성을 활용하여 수동으로 커밋을 수행하지 않아도된다는 점을 지적하고자했습니다.

    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()
    

    이는 특히 동일한 연결에서 INSERT, UPDATE 및 DELETE 문이 여러 개있는 경우에 유용합니다.

  4. from https://stackoverflow.com/questions/2847999/why-the-need-to-commit-explicitly-when-doing-an-update by cc-by-sa and MIT license