MySQL 및 Python으로 데이터베이스가 자동으로 업데이트되지 않음
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으로 파이썬 2.5.2를 실행하고 있습니다.
확실하지는 않지만 INODB 테이블을 사용하고 있으며 커밋을 하지 않은 것으로 추측됩니다.MySQLDB는 자동으로 트랜잭션을 가능하게 한다고 생각합니다.
불러conn.commit()
부르기 전에close
.
FAQ: 1.2.0부터 MySQLDB는 기본적으로 자동 커밋을 실행 중지합니다.
MySQLDB는 기본적으로 자동 커밋이 해제되어 있어 처음에는 혼란스러울 수 있습니다.연결은 자체 트랜잭션에 존재하며 해당 트랜잭션을 커밋하기 전에는 다른 연결에서 변경한 내용을 볼 수 없습니다.
당신은 할 수 있습니다.conn.commit()
다른 사람들이 지적한 대로 업데이트 문 이후에, 또는 설정을 통해 이 기능을 완전히 비활성화합니다.conn.autocommit(True)
연결 개체를 만든 후 바로 실행할 수 있습니다.
수동으로 변경 사항을 커밋하거나 자동 커밋을 켜야 합니다.
SELECT가 수정된(지속되지는 않지만) 데이터를 반환하는 이유는 연결이 여전히 동일한 트랜잭션에 있기 때문입니다.
파이썬의 커넥터가 자동으로 자동 커밋을 끄는데, 이 동작을 변경할 방법이 없는 것 같습니다.물론 다시 켤 수 있지만 쿼리 로그를 보면 연결 후 의미 없는 쿼리를 두 번 수행하여 자동 커밋을 껐다가 다시 켭니다.
커넥터/파이썬 연결 인수
자동 커밋은 데이터베이스에 연결할 때 직접 실행할 수 있습니다.
import mysql.connector as db
conn = db.connect(host="localhost", user="root", passwd="pass", db="dbname", autocommit=True)
또는 별도로:
import MySQLdb
conn = MySQLdb.connect(host="localhost", user="root", passwd="pass", db="dbname")
cursor = conn.cursor()
conn.get_autocommit() # will return **False**
conn.autocommit(True) # will make it True
conn.get_autocommit() # Should return **True** now
cursor = conn.cursor()
변경 사항을 명시적으로 적용할 경우
conn.commit()
나는 실행해야 합니다.SET autocommit=true
내 mysql Workbench 앱 스크립트에서
언급URL : https://stackoverflow.com/questions/384228/database-does-not-update-automatically-with-mysql-and-python
'programing' 카테고리의 다른 글
initiale mysql window api 함수 CreateProcessA 를 사용합니다. (0) | 2023.10.18 |
---|---|
어떻게 하면 이 스크립트를 수정하여 레코드를 표시하지 않고 삭제할 수 있습니까? (0) | 2023.10.18 |
0으로 구분: C 및/또는 C++에 정의되지 않은 행동 또는 구현? (0) | 2023.10.18 |
두 unint8_tas unint16_t 결합 (0) | 2023.10.18 |
x.jade 부분을 각도로 렌더링하는 것이 가능합니까? (0) | 2023.10.18 |