Python Cygwin上的MySQLdb

Python Cygwin上的MySQLdb,python,mysql,mysql-python,Python,Mysql,Mysql Python,在Cygwin和Python上使用MySQLdb,我得到以下错误。我不想在Cygwin上安装MySQLDB。有没有一种方法可以让我使用windows版本的MySQL并直接连接到它 Python 2.7.5 (default, Oct 2 2013, 22:34:09) [GCC 4.8.1] on cygwin Type "help", "copyright", "credits" or "license" for more information. >>> import M

在Cygwin和Python上使用MySQLdb,我得到以下错误。我不想在Cygwin上安装MySQLDB。有没有一种方法可以让我使用windows版本的MySQL并直接连接到它

Python 2.7.5 (default, Oct  2 2013, 22:34:09)
[GCC 4.8.1] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
>>> db = MySQLdb.connect(host="localhost", user="root", passwd="root" )
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/site-packages/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "/usr/lib/python2.7/site-packages/MySQLdb/connections.py", line 193, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (2002, "Can't connect to local MySQL server through socket      '/var/run/mysql.sock' (9)")
我还创建了mysql.sock文件,如下所示

$ pwd
/var/run/mysql

$ cat mysql.sock
[client]
port=3306
socket=/var/mysql/mysql.sock

[mysqld]
port=3306
socket=/var/mysql/mysql.sock
key_buffer_size=16M
max_allowed_packet=8M

我不知道运行这个还需要什么。有什么想法吗?

我还没有找到一个完整的解决方案,但是如果您使用“127.0.0.1”而不是“localhost”,它会起作用。还不知道为什么,但localhost使用cygwin的curl,而不是mysql或python


更新:您不需要定义.cnf或.sock文件

套接字应该在启动期间由MySQL服务器自动创建,但它并不总是在MySQLdb期望的文件夹中。您可以在
/tmp/mysql.sock
中找到它,这是
--socket
命令行参数的名称。如果没有,您可以使用以下内容搜索:

如果默认情况下
MySQLdb
/var/lib/mysql/mysql.sock
上查找套接字,但您发现您的套接字在其他地方,则可以使用连接函数的
unix\u socket
参数,例如:

conn = MySQLdb.connect(user=myuser, passwd=mypass, unix_socket='/tmp/mysql.sock')

主机
端口
参数是可选的,通常当您希望通过unix套接字连接时,可以忽略这两个参数,因为您需要默认主机,并且没有使用TCP端口。

您好,我遇到了相同的错误。我的数据库是肯定的。我已经仔细检查过了。我也尝试了使用指定端口进行连接。>>db=MySQLdb.connect(host=“127.0.0.1”,user=“root”,passwd=“root”,port=3036)_mysql_异常。操作错误:(2003,“无法连接到127.0.0.1”(0)上的mysql服务器专家-以上有什么想法吗?这很有效-db=MySQLdb.connect(host=“127.0.0.1”,user=“root”,passwd=“root”,unix_socket='/var/mysql/mysql.sock',port=3306)。也必须添加端口。@myloginid 3306是默认端口;指定
port=3306
对代码的执行方式没有影响。问题只是输入错误-您试图连接端口3036。在本例中,
unix\u socket
参数也没有做任何事情,因为
host=127.0.0.1
告诉MySQL使用TCP。因此,如果这起作用,那么
db=MySQLdb.connect(host=127.0.0.1,user='root',passwd='root')
也应该起作用。
$ find / -name 'mysql.sock' 2>/dev/null
conn = MySQLdb.connect(user=myuser, passwd=mypass, unix_socket='/tmp/mysql.sock')