2011-09-18 2 views
7

문제가있는 선택 쿼리를 보낼 수 있지만 업데이트 및 삽입 쿼리를 보내면 스레드 대기를 시작하고 더 이상 응답하지 않습니다. 확신 할 수는 없지만 루프처럼 보입니다.psycopg2 (삽입, 업데이트) 쓰기 문제

변경 사항을 적용하기 위해 "commit()"을 사용해야하지만 작동하지 않는다는 것을 알고 있습니다.

import psycopg2 
conn = psycopg2.connect("dbname='test' user='postgres' host='localhost' password='xx"); 
cursor = conn.cursor() 
cursor.execute("UPDATE recording SET rank = 10 WHERE id = 10;") 
conn.commit() 
cursor.close() 
+0

내 삽입 쿼리와 동일한 문제가 발생합니다. –

답변

-4

문제는 psycopg2가 스레딩을 지원하지 않는다는 것입니다.

4

가장 가능성이 스레드 데이터베이스의 잠금/프로세스가 동일한 레코드를 업데이트하려고 :

여기 내 코드입니다.

+0

파이썬에서 행을 업데이트하기 위해 스레딩을 사용합니다 (각 쿼리는 다른 행을 업데이트합니다). 잠금없이 레코드를 업데이트 할 수있는 방법이 있습니까? –

+0

그것은 당신이해야 할 일에 달려 있습니다. 자동 커밋 트랜잭션을 사용하면 트랜잭션이 짧아지고 잠긴 프로세스는 곧 다시 작동하지만 원하는 효과에 따라 달라집니다. – piro

14
import psycopg2 
conn = psycopg2.connect(database="dbasename",user="username",password='your_password',host='web_address',port='your_port') 
cursor = conn.cursor() 
cursor.execute("UPDATE table_name SET update_column_name=(%s) WHERE ref_column_id_value = (%s)", ("column_name","value_you_want_to_update",)); 
conn.commit() 
cursor.close() 

실행 문을 올바르게 포맷하지 않았습니다.

+0

변수 "cur"의 출처가 어디인지 알 수 없습니다. – CheeHow