Próbuję użyć konektora MySQL jako alternatywy dla pymysql, ponieważ obsługuje on wiele instrukcji w jednym zapytaniu dla niektórych aktualizacji, które muszę wykonać (Here is my other question related to that), ale zawiedzie dla mojego innego przypadku użycia wysyłania bardzo dużych instrukcji wyboru.Python złącza MySQL 35 Zasób tymczasowo niedostępny przy dużych zapytaniach?
Mam generowane dynamicznie polecenie Select, które pobiera wszystkie wiersze pasujące do którejkolwiek z podanych wartości; na przykład Select * from table where col_a in (val_1, val_2.... val_350,000)
wciąż otrzymuję ten sam błąd na moich wybranych stwierdzeń:
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
Dzieje się tak niezależnie od tego czy mam skompresować = True lub False. Też nie sądzę, że to jest problem po stronie serwera, ponieważ wspomniałem, że dokładnie te same instrukcje Select wydają się pracować z pymysql z uruchomionym tym samym kodem i maszyną.
Jakieś pomysły, jak sobie z tym poradzić?
Skąd czerpiesz wartości 350k w parametrach? Baza danych? –
Nie, mam surowy plik tekstowy, który otrzymuję, który je ma (są one zawsze różne) i muszę wyciągnąć odpowiednie wiersze z bazy danych, aby wykonać pewne transformacje i aktualizacje przy użyciu innych nieprzetworzonych danych. –
@RyanVincent Mogłem i jest to praca wokół mnie, ale dodaje więcej kodu, który naprawdę nie powinien być w mojej opinii. Martwi mnie to, że wiem, że DB może sobie z tym poradzić i wiem, że Python może sobie z tym poradzić, ponieważ działa za pomocą PyMYSQL, więc frustrujące jest nie wiedzieć, dlaczego nie działa z biblioteką łączników 1) Dzielenie wartości w grupach 40 000 2) Zbudowanie liczby zapytań N i wykonanie połączeń 3) Połączenie wyników razem –