Ошибка подключения в коде PyMySQL Windows 10 Python 3.5.0?

Я пытаюсь использовать PyMySQL 0.79 с python 3.5.0 под Windows 10, но получаю ошибку подключения при запуске простой программы, которую я назвал "test.py"...

import pymysql
db = pymysql.connect( host = 'sqlserver.example.com', passwd 'SECRET12345', user = 'dbuser', db='myDatabase')
cursor = db.cursor()
sql = "INSERT INTO people (name, email, age) VALUES (%s, %s, %s)"
cursor.execute( sql, ( "Jay", "jay@example.com", '77') )
cursor.close()
db.commit()   #Makes sure the DB saves your changes!
db.close()

Но приведенный выше код дает мне сообщение об ошибке:

C:\Users\Avtar\AppData\Local\Programs\Python\Python35-32\Lib\site-packages\pymysql>test.py
Traceback (most recent call last):
  File "C:\Users\Avtar\AppData\Local\Programs\Python\Python35-32\lib\site-packages\pymysql\connections.py", line 890, in connect
    (self.host, self.port), self.connect_timeout)
  File "C:\Users\Avtar\AppData\Local\Programs\Python\Python35-32\lib\socket.py", line 689, in create_connection
    for res in getaddrinfo(host, port, 0, SOCK_STREAM):
  File "C:\Users\Avtar\AppData\Local\Programs\Python\Python35-32\lib\socket.py", line 728, in getaddrinfo
    for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno 11001] getaddrinfo failed

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Users\Avtar\AppData\Local\Programs\Python\Python35-32\Lib\site-packages\pymysql\test.py", line 2, in <module>
    db = pymysql.connect( host = 'sqlserver.example.com', passwd = 'SECRET12345', user = 'dbuser', db='myDatabase')
  File "C:\Users\Avtar\AppData\Local\Programs\Python\Python35-32\lib\site-packages\pymysql\__init__.py", line 90, in Connect
    return Connection(*args, **kwargs)
  File "C:\Users\Avtar\AppData\Local\Programs\Python\Python35-32\lib\site-packages\pymysql\connections.py", line 688, in __init__
    self.connect()
  File "C:\Users\Avtar\AppData\Local\Programs\Python\Python35-32\lib\site-packages\pymysql\connections.py", line 937, in connect
    raise exc
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'sqlserver.example.com' ([Errno 11001] getaddrinfo failed)")

Я установил PyMySQL с помощью команды pip install pymysql и для проверки установки набрал:

"Список пунктов", который дает мне:

pip (9.0.1)
PyMySQL (0.7.9)
setuptools (18.2)
yolk (0.4.3)

'pip show pymysql', который дает мне:

Name: PyMySQL
Version: 0.7.9
Summary: Pure Python MySQL Driver
Home-page: https://github.com/PyMySQL/PyMySQL/
Author: INADA Naoki
Author-email: songofacandy@gmail.com
License: MIT
Location: c:\users\avtar\appdata\local\programs\python\python35-32\lib\site-packages
Requires:

Из этого я не могу понять, что я делаю неправильно, поэтому буду очень признателен, если кто-нибудь сможет мне помочь разобраться в этом. Заранее спасибо.

1 ответ

Прежде всего, хосты типа: "sqlserver.example.com", обычно это Microsoft SQL Server, а не MySQL. Если это так (т.е. вы используете SQL Server), то вместо использования pymysql библиотека, вы должны использовать более общую библиотеку; такие как pyodbc,

Основываясь на другом вопросе stackru, для Python2.7, способ использования этой библиотеки заключается в следующем:

cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=sqlserver.example.com;DATABASE=testdb;UID=me;PWD=pass')
cursor = cnxn.cursor()

Однако, если вы на самом деле используете MySQL, значит, ваша конфигурация неверна...

Ваш код, обратите внимание, что он не имеет "=" между паролем и вашим паролем; и при этом у этого нет номера порта.

db = pymysql.connect( host = 'sqlserver.example.com', passwd 'SECRET12345', user = 'dbuser', db='myDatabase')

В качестве такового я бы предложил:

db = pymysql.connect( host = 'sqlserver.example.com', port=3306, passwd='SECRET12345', user = 'dbuser', db='myDatabase')

Если ваш порт не 3306, и вы не уверены, в каком порту находится ваш mysql, то, чтобы найти порт, сделайте следующее:

mysql> select * from INFORMATION_SCHEMA.GLOBAL_VARIABLES WHERE VARIABLE_NAME LIKE 'PORT'; 
+---------------+----------------+
| VARIABLE_NAME | VARIABLE_VALUE |
+---------------+----------------+
| PORT          | 2127           |
+---------------+----------------+
1 row in set (0.00 sec)
Другие вопросы по тегам