Pymysql не может подключиться к базе данных MySQL: зависает на self.sock.recv_into(b)?

В настоящее время на macOS 10.15 с использованием Python 3.7 с установленной MySQL 8.0.19. Разработка в VScode с настройкой виртуальной среды. Я также создал локальную базу данных в phpmyadmin. Я хочу подключиться к нему во что бы то ни стало. Скрипт:

import pymysql

print("Before")
connection = pymysql.connect(host='localhost',
    user='myUserName', password='myPassword', db='db_name', charset='utf8mb4', 
          cursorclass=pymysql.cursors.DictCursor)
print("After")

Когда я запускаю скрипт, выполнение зависает на неопределенный срок. После печати «После» я должен прекратить выполнение. Трекбэк это:

Traceback (most recent call last):
File "connect.py", line 5, in <module>
  user='myUserName', password='myPassword', db='db_name', charset='utf8mb4', 
  cursorclass=pymysql.cursors.DictCursor)
File "/Users/name/Documents/Work/Connection Test/env/lib/python3.7/site- 
  packages/pymysql/__init__.py", line 94, in Connect
  return Connection(*args, **kwargs)
File "/Users/name/Documents/Work/Connection Test/env/lib/python3.7/site- 
  packages/pymysql/connections.py", line 325, in __init__
  self.connect()
File "/Users/name/Documents/Work/Connection Test/env/lib/python3.7/site- 
  packages/pymysql/connections.py", line 598, in connect
  self._get_server_information()
File "/Users/name/Documents/Work/Connection Test/env/lib/python3.7/site- 
  packages/pymysql/connections.py", line 975, in _get_server_information
  packet = self._read_packet()
File "/Users/name/Documents/Work/Connection Test/env/lib/python3.7/site- 
packages/pymysql/connections.py", line 657, in _read_packet
  packet_header = self._read_bytes(4)
File "/Users/name/Documents/Work/Connection Test/env/lib/python3.7/site- 
  packages/pymysql/connections.py", line 691, in _read_bytes
  data = self._rfile.read(num_bytes)
File "/usr/local/Cellar/python/3.7.6_1/Frameworks/Python.framework/Versions/3.7/lib/
python3.7/socket.py", line 589, in readinto
  return self._sock.recv_into(b)
KeyboardInterrupt

Не знаю, почему это происходит. Что здесь происходит? Я искал массу вопросов о переполнении стека, и ни один из них не помог мне.


person J.E.C.    schedule 20.02.2020    source источник


Ответы (1)


Проблема была решена путем добавления параметра unix_socket в функцию подключения pymysql. См. ответ здесь: pymysql не может подключиться к MySQL на локальном хосте

import pymysql

print("Before")
conn = pymysql.connect(db='w_dev', user='root', passwd='celebrate', 
unix_socket="/tmp/mysql.sock")
print("After")

Этот скрипт сработал.

person J.E.C.    schedule 20.02.2020