为什么Python3.5在具有正确凭据的MySQL连接上崩溃?

为什么Python3.5在具有正确凭据的MySQL连接上崩溃?,python,mysql,python-3.x,mariadb,Python,Mysql,Python 3.x,Mariadb,我正在Windows10上使用Python 3.5.1、mysqlclient 1.3.9(MySQLdb的分支,支持Python 3)和MariaDB 10.1(64位) 当我跑的时候 import MySQLdb con = MySQLdb.connect(user=my_user, passwd=my_pass, db=my_db) Python崩溃 在pycharm中,我也收到了信息 Process finished with exit code -1073741819 (0xC000

我正在Windows10上使用Python 3.5.1、mysqlclient 1.3.9(MySQLdb的分支,支持Python 3)和MariaDB 10.1(64位)

当我跑的时候

import MySQLdb
con = MySQLdb.connect(user=my_user, passwd=my_pass, db=my_db)
Python崩溃

在pycharm中,我也收到了信息

Process finished with exit code -1073741819 (0xC0000005)
我没有收到任何其他错误。这与使用错误凭据运行相同语句时发生的情况不同:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Program Files\Python35\lib\site-packages\MySQLdb\__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "C:\Program Files\Python35\lib\site-packages\MySQLdb\connections.py", line 191, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
_mysql_exceptions.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: YES)")
详情:

- System 
  - Provider 
   [ Name]  Application Error 
  - EventID 1000 
   [ Qualifiers]  0 
   Level 2 
   Task 100 
   Keywords 0x80000000000000 
  - TimeCreated 
   [ SystemTime]  2016-10-15T21:21:48.041795500Z 
   EventRecordID 7615 
   Channel Application 
   Computer PETER-LENOVO 
   Security 

- EventData 
   python.exe 
   3.5.1150.1013 
   56639598 
   python35.dll 
   3.5.1150.1013 
   56639583 
   c0000005 
   00000000000e571c 
   4a4 
   01d2272a22ae1a1a 
   C:\Program Files\Python35\python.exe 
   C:\Program Files\Python35\python35.dll 
   6dd874e6-5ea5-4919-af8b-4880a2c7ac5e

我不熟悉
pycharm
,但我认为您的问题在于@nemanjap建议的
MySQLdb
安装。我刚刚经历了一个类似的噩梦(使用Python3.5),所以我希望我能提供帮助。以下是我的建议:

  • 如果尚未安装,请安装
    pip
  • 从安装Visual Studio Community 2015(您只需要Python编译工具)
  • 安装控制盘:
    pip安装控制盘
  • 从下载MySQLdb windows二进制文件,特别是
    mysqlclient-1.3.8-cp35-cp35m-win32.whl
    (我也是64位的,但我很小心)
  • 从站点包中删除MySQLdb文件夹(如果存在),以防万一
  • 假设您与二进制下载位于同一文件夹中,请运行
    pip安装mysqlclient-1.3.8-cp35-cp35m-win32.whl
如果运气好的话,你应该能够连接


注释

在我的机器上,我的连接被立即中止(
在我的
error.log
中读取通信数据包时出错),即使我的凭据100%正确。在windows方面,与OP类似,Python只是“崩溃”,这意味着我得到了一个shell重新启动,并且从未越过
MySQLdb.connect
行。即使是
try
块也不允许进一步执行(因此实际上是崩溃,而不是异常或错误)。考虑到兼容性问题(UNIX运行完全正常),我尝试在Windows中调试
MySQLdb
,一直到
import\u mysql
,这时我意识到这是一个C(编译)问题

考虑到所有安装都很好,当我执行
pip install MySQLdb python
时,我得到了以下信息:

error: Unable to find vcvarsall.bat
Cannot open include file: 'config-win.h'
这意味着我需要为我的Python版本(3.5)安装编译工具,它包含在VSC2015安装中。我重新运行,然后得到以下结果:

error: Unable to find vcvarsall.bat
Cannot open include file: 'config-win.h'
这意味着我需要一些必要的标题,从这里开始:(再次,32位,只是为了安全起见)。然后我得到了一堆未解决的外部符号错误,意识到我有多讨厌Windows,于是安装了预编译版本。创造了奇迹

哦,在有人建议使用不同的模块或方法进行连接之前,比如
mysql connector
,除了不能解决问题之外,通常还有一个约束条件,即相同的代码(因此,相同的导入模块)应能在Windows和UNIX机器上工作。再加上:


抱歉发了这么长的邮件。我需要发泄!祝你好运

你能直接使用mysql-u my_user-p my_db
登录吗?@Ixer,是的,这很好。那么wiht
-h localhost
呢?@JonStirling也可以。在这种情况下,你需要反复检查你刚才尝试的凭据是否确实是连接中使用的凭据。谢谢你的详细回答!我稍后会尝试你的步骤,然后再回复你。工作得很有魅力,接受了你的回答。再次感谢!谢谢我在这个问题上浪费了很多时间。你的解决方案成功了。