2011-09-18 8 views
7

Mogę wysyłać wybrane zapytania z dowolnym problemem, ale kiedy wysyłam aktualizacje i wstawiam zapytania, zaczynam czekać wątek i nie odpowiadam więcej. Nie mogłem być tego pewien, ale wydaje się, że to pętla.psycopg2 (insert, update) write problem

Wiem, że musimy użyć "commit()" do zastosowania zmian, ale to nie działa.

Oto mój kod:

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

Mam ten sam problem z zapytaniami o wstawianie. –

Odpowiedz

-4

Problem polega na tym, że psycopg2 nie obsługuje wątków.

4

Jest najprawdopodobniej zamek w bazie danych, z gwintem/procesy próbują aktualizować ten sam rekord.

+0

Używam wątków w Pythonie do aktualizowania wierszy (każde zapytanie aktualizuje inny wiersz). czy istnieje sposób aktualizacji rekordów bez blokowania? –

+0

To zależy od tego, co musisz zrobić. Korzystanie z transakcji autocommit zapewniłoby krótkie transakcje, a zablokowany proces wkrótce będzie działać, ale to naprawdę zależy od pożądanego efektu. – 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() 

Nie sformatowano poprawnie instrukcji execute.

+0

Nie widzę, skąd pochodzi zmienna "cur" ... co za wstyd – CheeHow

Powiązane problemy