2012-06-11 2 views
2

우리는 MySQL 데이터베이스가 있고 DB API에서 SQLAlchemy로 전환 중입니다. 문서에서 ResultProxy.rowcount는 UPDATE 문에 의해 영향을받는 행 수를보고합니다. 일치하는 행이 있다면SQLAlchemy UPDATE에 영향을받는 행이 없을 때 ResultProxy.rowcount가 0이 아닙니다.

UPDATE table 
SET field = 
IF(field < 10, 10, field) WHERE id = 1 

그것은 하나의 행 개수를 반환되지만, "필드"중 어느 값 (때에도 크거나 10보다 같)

난 SQLAlchemy의하여이 쿼리를 실행할 경우. DB API를 사용하여이 쿼리를 실행하면 영향을받는 행 수 (필드가 10보다 크거나 같을 때는 0, 더 낮은 경우에는 1)이 반환되었습니다.

변경 사항이 있는지 여부를 확인하기 위해 먼저 선택 쿼리를 실행해야하기 때문에 문제가 발생합니다. SQLAlchemy의 버그입니까? 문서에서는 명확하게 일치하는 행의 수가 아니라 영향을받는 행의 수를 반환해야한다고 명시합니다.

감사합니다. ROW_COUNT()에 대한

답변

0

MySQL의 아니오 경험하지만, 문서 계시 : UPDATE 문의 경우

는 기본적으로 영향을받는-행 값이 행의 수는 실제로 변경입니다. mysqld에 연결할 때 에 CLIENT_FOUND_ROWS 플래그를 지정하면 영향을받은 행의 값은 "발견 된"행의 수입니다. 그 은 WHERE 절과 일치합니다. "발견"행합니다 (WHERE 절 유사한 것) 실제의

    • 번호 :

  • 그래서, 접속 구성에 따라, 그 결과는 두개 중 하나가 될 수있다 "업데이트 된"행 (적어도 하나의 열에있는 값이 변경된 곳)

    sqlalchemy와의 관계에 관해서는 버그인지 또는 ab 문서로 업데이트해야하는지 잘 모르겠습니다. 문언 말이다. 어떤 경우
    , 당신은 또 다른 의미 같은으로 SQL 문을 다시 작성하여 문제를 해결할 수 있습니다 :

    UPDATE table 
    SET  field = 10 
    WHERE id = 1 
        AND field < 10 
    
    +0

    감사합니다, 그 영리한 해결 방법입니다! SQLAlchemy가이 값을 반환 한 이유를 찾는데 너무 집중했습니다. 그래도 버그가있는 것 같아서 SQLAlchemy에 연락 할 것입니다. – Faelenor

    관련 문제