2014-03-03 4 views
0

데이터를 공유하기 위해 중앙 MySQL 데이터베이스와 상호 작용하는 몇 가지 스크립트를 만들고 있지만 데이터베이스에 적용한 일부 변경 사항이 특정 스크립트를 통해 전파되거나 읽을 수 없다는 것을 알고 있습니다. 데이터베이스 연결이 닫히고 다시 열릴 때까지동시 MySQL 데이터베이스 연결에 업데이트가 나타나지 않음

예를 들어 read_scriptwrite_script을 사용하여 데이터베이스에 추가 된 항목 만 인쇄하고 종료 한 후 write_script을 다시 시작합니다. 나는 내 SQL에 문제가 있거나 내 파이썬

read_script이있는 경우 MySQL의 새로운 그래서 난 잘 모르겠어요 해요

connection = MySQLdb.connect(...) 
while True: 
    cur = connection.cursor() 
    cur.execute("SELECT * FROM my_table") 
    print cur.fetchall() 
    cur.close() 

write_script I가해야 할 일을

connection = MySQLdb.connect(...) 
cur = connection.cursor() 
cur.execute("INSERT INTO my_table VALUES(some_data)") 
cur.close() 
connection.commit() 

데이터베이스에서 데이터 데이터를 가져와야합니까?

답변

3

기본 트랜잭션 격리는 REPEATABLE READ입니다. 즉, read_script는 항상 동일한 데이터를 읽고 표시합니다. while 루프에서 커밋하기. 참고 : 아마도 time.sleep(1)을 사용하여 시간을 측정하는 것이 좋습니다.

+0

+1 (커밋),하지만 잠을 잘 수 있는지 확실하지 않습니다. –

+0

서버를 플러딩하는 것은 결코 좋지 않습니다. 나는 조금 대답을 업데이트 할 것이다. – geertjanvdk

1

예, 단일 트랜잭션을 수행 한 다음 연결을 끊을 것이라고 가정합니다. 필요성이 다른 경우이 가정을 해결해야합니다. 커밋을 넣을 수 있습니다 (실제로 데이터를 변경하지 않으면 롤백을 사용합니다).

: 당신이 자동으로 연결 true로 커밋 설정할 수 있습니다 것 같습니다,

dbcursor.execute("SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED")

또는 - @geertjanvdk에서 언급 한 바와 같이 아니면 커서의 분리 레벨을 변경할 수 있습니다 this discussion에서 나는 이것을 사용

dbconn.autocommit(True)

실제로 연결을 변경하는 경우에도이 방법을 사용하지 않는 것이 좋습니다.

관련 문제