2012-10-24 11 views
6

EDYCJA: Ten problem jest niewiarygodny. Udało mi się teraz zastąpić irytującą funkcję drukowania funkcją time.sleep (0.01), ale dlaczego na ziemi powinienem skorzystać z WOLNEGO czasu realizacji jest poza mną.Złącze MySql umiera w języku Python

Mam problem z iterowaniem kursora w złączu MySQL 1.0.7 dla Pythona 3.23.

ile print() wynik każdej iteracji (który jest zarówno głupie i czasochłonne) pojawia się następujący błąd podniesiony:

raise errors.InterfaceError(errno=2013) mysql.connector.errors.InterfaceError: 2013: Lost connection to MySQL server during query

jakieś przemyślenia?

kod jest trywialne thusfar:

self.config = {'user': user,'password': password,'host': host,'database':  
database,'raise_on_warnings': True} 

self.data = [] 
self.clickcnx = mysql.connector.connect(**self.config) 
self.clickcursor = self.clickcnx.cursor() 

query = "SELECT table1, table2, table3 FROM `db`-tables;" 
self.clickcursor.execute(query) 
for item in self.clickcursor: 
    print(item)  #this is the strange line that I need! 
    self.data.append(item) 
self.clickcnx.close() 
+3

Proszę napisać kod, który uruchamia to. –

+1

W moim przypadku "rozwiązaniem" było time.sleep (0.000001) (był to najmniejszy czas snu, jaki mogłem znaleźć, który nie spowodowałby błędu). Naprawdę dziwne, ale dzięki za opublikowanie tego. Czy kiedykolwiek znalazłeś właściwe rozwiązanie? – Haakon

Odpowiedz

1

Brakuje części, w której rzeczywiście pobrać wyników, to są po prostu wzmocnienie nad kursorem.

Spróbuj wersję:

query = "SELECT table1, table2, table3 FROM `db`-tables;" 
self.clickcursor.execute(query) 
results = self.clickcursor.fetchall() 
for item in results: 
    print(item)  #this is the strange line that I need! 
    self.data.append(item) 
self.clickcnx.close() 
+0

Dzięki za troskę !! To jeszcze nie działa :(Ale będę pracował przez chwilę ... – user1597652

+0

Otrzymujesz ten sam błąd? –

+0

Dokładnie ten sam błąd ... bardzo dziwny. Rzeczywiście pogarsza się z zalecanymi zmianami, ponieważ teraz dziwaczne Polecenie print() już nie pomaga. Musiałem obrazić bogów SQL ... – user1597652

1

miałem ten sam problem z 1.0.7. Dodanie parametru time.sleep() naprawiło to. Następnie zaktualizowałem do wersji 1.0.10 i usunąłem uśpienie. To też działa dobrze.

więc rozwiązaniem wydaje się być:

pip install --upgrade mysql-connector-python 

Być może trzeba używać sudo.

0

Wystąpił problem ze złączem MySQL. Próbowałem odpowiedzi Burhana Khalida, ale to nie zadziałało. Byłem w stanie rozwiązać mój problem, dodając instrukcję GROUP BY.

Original zapytania:

SELECT 
    a.ID, 
    a.UID, 
    g.GroupId, 
FROM Accounts a 
    LEFT JOIN Profile p ON p.ID = a.ID 
    LEFT JOIN Group g ON g.GroupId = p.GroupId 
WHERE 
    a.UID IS NOT NULL 
    AND a.Active = 1 
    AND a.Type = 1; 

kwerendy, która zwraca te same rezultaty jak oryginalny:

SELECT 
    a.ID, 
    a.UID, 
    g.GroupId, 
FROM Accounts a 
    LEFT JOIN Profile p ON p.ID = a.ID 
    LEFT JOIN Group g ON g.GroupId = p.GroupId 
WHERE 
    a.UID IS NOT NULL 
    AND a.Active = 1 
    AND a.Type = 1 
GROUP BY 
    a.UID; 

Jedyna różnica polega na drugie zapytanie nie rzucić InterfaceError (2013) . Moje zapytanie zwraca około 250 000 wierszy. Przeprowadziłem wyjaśnienie każdego z tych zapytań i ku mojej niespodziance, drugie zapytanie trwa dłużej (Czas trwania) niż pierwsze, ponieważ przechowuje wyniki w tabeli tymczasowej, ale czas pobierania wyniósł od 6,00 s do 0,50 s!

Spróbuj dodać agregator GROUP BY i sprawdź, czy to rozwiąże problem. Oczywiście musisz upewnić się, że twoje wyniki są takie same. Sugeruję wykonanie GROUP BY na wartości tabeli, która według Ciebie będzie wyjątkowa.