문제

MySQL 데이터베이스에서 행을 업데이트하는 데 문제가 있습니다. 다음은 내가 실행하려는 코드입니다.

import MySQLdb

conn=MySQLdb.connect(host="localhost", user="root", passwd="pass", db="dbname")
cursor=conn.cursor()

cursor.execute("UPDATE compinfo SET Co_num=4 WHERE ID=100")
cursor.execute("SELECT Co_num FROM compinfo WHERE ID=100")
results = cursor.fetchall()

for row in results:
    print row[0]

print "Number of rows updated: %d" % cursor.rowcount

cursor.close()
conn.close()

이 프로그램을 실행할 때 얻는 출력은 다음과 같습니다.

4
업데이트 된 행 수 : 1

작동하는 것처럼 보이지만 MySQL 명령 줄 인터페이스 (CLI)에서 데이터베이스를 쿼리하면 전혀 업데이트되지 않았다는 것을 알게되었습니다. 그러나 CLI에서 내가 입력하면 UPDATE compinfo SET Co_num=4 WHERE ID=100; 데이터베이스는 예상대로 업데이트됩니다.

내 문제는 무엇입니까? Windows 상자에서 MySQL 5.1.30으로 Python 2.5.2를 실행하고 있습니다.

도움이 되었습니까?

해결책

나는 확실하지 않지만, 당신이 innodb 테이블을 사용하고 있다고 생각하고 당신은 커밋을하지 않았다. MySQLDB가 자동으로 트랜잭션을 활성화한다고 생각합니다.

부르다 conn.commit() 전화하기 전에 close.

FAQ에서 : 1.2.0으로 시작하여 MySQLDB는 기본적으로 자동 커밋을 비활성화합니다

다른 팁

MySQLDB에는 기본적으로 자동 커밋이 꺼져 있으며 처음에는 혼란 스러울 수 있습니다. 귀하의 연결은 자체 거래에 존재하며 해당 거래를 커밋 할 때까지 다른 연결에서 변경 사항을 볼 수 없습니다.

당신은 할 수 있습니다 conn.commit() 다른 사람들이 지적한 것처럼 업데이트 명령문 후에,이 기능을 설정 하여이 기능을 모두 비활성화합니다. conn.autocommit(True) 연결 객체를 만든 직후.

변경 사항을 수동으로 커밋하거나 자동 커밋을 켜야합니다.

Select가 수정 된 (지속되지 않은) 데이터를 반환하는 이유는 연결이 여전히 동일한 트랜잭션에 있기 때문입니다.

Python의 커넥터가 자동으로 자동 커밋을 끄고이 동작을 변경할 수있는 방법이없는 것으로 나타났습니다. 물론 다시 켜질 수는 있지만 쿼리 로그를 보면 autocommit을 끄고 다시 켜기 위해 연결 한 후 두 가지 무의미한 쿼리를 어리석게 수행합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top