2012-10-24 12 views
6

EDIT: Questo problema è incredibile. Ora sono riuscito a sostituire una fastidiosa funzione di stampa con time.sleep (0,01), ma perché mai dovrei beneficiare di un tempo di esecuzione di SLOWER è al di là di me.Il connettore MySql muore in Python

Ho un problema nel scorrere il mio cursore nel connettore MySQL 1.0.7 per Python 3.23.

A meno print() il risultato di ogni iterazione (che è sia sciocca e richiede tempo) ottengo il seguente errore cresciuto:

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

Qualche idea?

il codice è thusfar banale:

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

Si prega di inviare il codice che sta attivando questo. –

+1

Nel mio caso, la "soluzione" era time.sleep (0,000001) (questo era il tempo di sonno più piccolo che potessi trovare che non avrebbe innescato l'errore). Davvero bizzarro, ma grazie per aver postato questo. Hai mai trovato una soluzione adeguata? – Haakon

risposta

1

Ti manca la parte in cui è effettivamente recuperare i risultati, si sono appena scavalcando il cursore.

Prova questa versione:

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

Grazie per l'attenzione !! Non funziona ancora :(Ma lavorerò per un po '... – user1597652

+0

Hai lo stesso errore? –

+0

Lo stesso errore ... molto strano. In realtà peggiora con le modifiche che hai consigliato, perché ora è bizzarro la dichiarazione print() non è più d'aiuto. Devo aver offeso gli dei di SQL ... – user1597652

1

Ho avuto lo stesso problema con il 1.0.7. Aggiunta di un time.sleep() risolto. Poi ho aggiornato a 1.0.10 e rimosso il sonno. Anche questo funziona bene.

Quindi la soluzione sembra essere:

pip install --upgrade mysql-connector-python 

Potrebbe essere necessario usare sudo.

0

Ho riscontrato il problema con il connettore MySQL. Ho provato la risposta di Burhan Khalid, ma non ha funzionato. Sono stato in grado di risolvere il mio problema aggiungendo un'istruzione GROUP BY.

query originale:

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; 

query che restituisce gli stessi risultati dell'originale:

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; 

L'unica differenza è la seconda query non genera un InterfaceError (2013) . La mia query restituisce circa 250.000 righe. Ho eseguito una spiegazione su ciascuna di queste query e, a mia sorpresa, la seconda query richiede più tempo (Durata) rispetto alla prima perché memorizza i risultati in una tabella temporanea, ma il tempo di recupero è passato da 6,00 a 0,50!

Provare ad aggiungere un AGGREGATORE GROUP BY e vedere se questo risolve il problema. Ovviamente è necessario assicurarsi che i risultati siano gli stessi. Suggerisco di fare un GROUP BY su un valore di tabella che sai essere unico.

Problemi correlati