Sto cercando di utilizzare il connettore MySQL come alternativa a pymysql in quanto supporta più istruzioni in una query per alcuni aggiornamenti che devo fare (Here is my other question related to that) tuttavia non riesce per il mio altro caso di utilizzo di invio di istruzioni di selezione molto grandi.MySQL connector python 35 Risorsa temporaneamente non disponibile con query di grandi dimensioni?
Ho un'istruzione Select generata dinamicamente che recupera tutte le righe che corrispondono a uno dei valori specificati passati; per esempio Select * from table where col_a in (val_1, val_2.... val_350,000)
continuo a ricevere lo stesso errore per le mie istruzioni select:
Exception in thread Thread-1:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/mysql/connector/network.py", line 212, in send_compressed
self.sock.sendall(zip_packet)
BlockingIOError: [Errno 35] Resource temporarily unavailable
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/threading.py", line 921, in _bootstrap_inner
self.run()
File "/Users/maldeiri/raw_data_processing/sql_retriever.py", line 22, in run
self.mysql_cursor.execute(self.sql_statement)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/mysql/connector/cursor.py", line 515, in execute
self._handle_result(self._connection.cmd_query(stmt))
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/mysql/connector/connection.py", line 488, in cmd_query
result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/mysql/connector/connection.py", line 261, in _send_cmd
packet_number)
File "/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/site-packages/mysql/connector/network.py", line 215, in send_compressed
errno=2055, values=(self.get_address(), _strioerror(err)))
mysql.connector.errors.OperationalError: 2055: Lost connection to MySQL server at 'database_end_point:3306', system error: 35 Resource temporarily unavailable
Questo accade a prescindere se ho comprimere = True o False. Inoltre, non penso che questo sia un problema lato server, come ho già detto, le stesse istruzioni Select sembrano funzionare con pymysql in esecuzione con lo stesso codice e la stessa macchina.
Qualche idea su come posso aggirare questo?
Dove stai ottenendo i valori 350k nei parametri dall'inizio? Il database? –
No, ho un file di testo non elaborato che ho ricevuto (sono sempre diversi) e ho bisogno di estrarre le rispettive righe dal DB per fare alcune trasformazioni e aggiornamenti usando altri dati grezzi. –
@RyanVincent Potrei ed è un lavoro in giro che ho ma aggiunge più codice che in realtà non dovrebbe essere lì a mio parere. Ciò che mi dà fastidio è che so che il DB può gestirlo e so che Python può gestirlo perché funziona con PyMYSQL quindi è frustrante non sapere perché non funziona con la libreria di connettori 1) Dividere i valori in gruppi di 40.000 2) Costruire numero N di query e effettuare chiamate 3) Unione dei risultati insieme –