2012-03-07 2 views
0

이상한 문제가 있습니다. 두 개의 데이터베이스가 있습니다. 하나는 온라인 상점을 위해 모든 제품을 갖추고 있습니다. 다른 제품에는 온라인 상점 소프트웨어가 있으며 활성 제품 만 있습니다.파이썬 | MySQLdb -> 삽입 할 수 없습니다.

db1에서 값을 가져 와서 파이썬에서 값을 변경하고 db2에 삽입하고 싶습니다.

db1.execute("SELECT * FROM table1") 
for product in db1.fetchall(): 
    # ... 
    db2.execute("INSERT INTO table2 ...") 
    print "Check: " + str(db2.countrow) 

그래서 선택을 통해 값을 얻을 수 있으며, 심지어는 db2에서 선택해도 문제가 없습니다. 내 수표는 항상 저에게 1을 제공하지만 table2에는 새로운 행이 없습니다. 자동 증가 값은 커지지 만 데이터가 없습니다. 그리고 나는 "couldnt insert"와 같은 오류도 얻지 못합니다. 그래서 아무도 무엇이 잘못 될 수 있는지 생각하지 못합니까?

편집을 (내가 phpMyAdmin을 통해 수동으로 삽입 할 경우 작동 ... 그리고 난 그냥 내 스크립트에서 SQL을 가지고 그것을 할 경우 수동으로 SQL 명령문은 aswell 일) : 여기에 대답 How do I check if an insert was successful with MySQLdb in Python?

찾을 수 매번 커밋하지 않고 실행되도록하는 방법이 있습니까? mysqldb를 감싸는 래퍼를 가지고 있으며 저에게 완벽하게 작동합니다. 커밋으로 동작을 변경하면 커다란 변화가 필요합니다.

EDIT2 : ok 나는 db1이 MyISAM (커밋없이 작동 할 것임)이고 db2는 InnoDB (사실 커밋과 만 작동하는 것 같습니다)라고 생각합니다. DB2를 MyISAM으로 변경해야합니다.

답변

5

InnoDB를 사용하는 경우 삽입 후 db2.commit()을 추가하십시오.

은 1.2.0부터 MySQLdb는 DB-API 표준 (PEP-249)에 의해 요구 로, 기본적으로 자동 커밋을 비활성화합니다. InnoDB 테이블 또는 다른 유형의 트랜잭션 테이블 유형을 사용하는 경우 연결을 닫기 전에 connection.commit()을 수행해야합니다. 그렇지 않으면 변경 사항이 데이터베이스에 기록되지 않습니다.

http://mysql-python.sourceforge.net/FAQ.html#my-data-disappeared-or-won-t-go-away

+0

덕분에 그냥이 스레드에서 자신이 발견 : http://stackoverflow.com/questions/9014233/python-and-mysqldb-how-do-i-check-if-an- insert-was-successful –

+0

전에는 문제가 없었습니다. 그것은 실제로 나를 정말로 괴롭힌다. 데이터베이스는 심지어 myisam 인 innodb조차도 아니다. 예전처럼 그것을 만들 수있는 방법이 없을까요? ^^ –

+0

@xMRW autocommit을 true로 설정하는 연결 설정 매개 변수가 있어야합니다. 트랜잭션은 db integrity의 중요한 부분이므로주의를 기울이십시오. –

관련 문제