【问题标题】:Why is Python 3.5 crashing on a MySQL connection with correct credentials?为什么 Python 3.5 在具有正确凭据的 MySQL 连接上崩溃?
【发布时间】:2016-10-15 20:42:59
【问题描述】:

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

当我跑步时

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)")

我的 CentOS 服务器上不会出现此错误,该服务器运行 Python 3.4、mysqlclient 1.3.9 和 MariaDB 10.1。

按照this question 的建议,我尝试使用旧版本的 MariaDB,但无济于事。

什么可能导致此崩溃和神秘的错误报告缺失,我该如何解决?

编辑:在我的系统日志中,我发现了这个条目:

一般:

Faulting application name: python.exe, version: 3.5.1150.1013, time stamp: 0x56639598
Faulting module name: python35.dll, version: 3.5.1150.1013, time stamp: 0x56639583
Exception code: 0xc0000005
Fault offset: 0x00000000000e571c
Faulting process id: 0x4a4
Faulting application start time: 0x01d2272a22ae1a1a
Faulting application path: C:\Program Files\Python35\python.exe
Faulting module path: C:\Program Files\Python35\python35.dll
Report Id: 6dd874e6-5ea5-4919-af8b-4880a2c7ac5e
Faulting package full name: 
Faulting package-relative application ID: 

详情:

- 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

【问题讨论】:

  • 可以直接用mysql -u my_user -p my_db登录吗?
  • @Ixer,是的,效果很好。
  • -h localhost 呢?
  • @JonStirling,也可以。
  • 在这种情况下,您需要双重和三重检查您刚刚尝试的凭据是否肯定是您的连接中使用的凭据。

标签: python mysql python-3.x mariadb


【解决方案1】:

我不熟悉pycharm,但我认为您的问题正如@nemanjap 所建议的那样,您的MySQLdb 安装。我刚刚经历了类似的噩梦(使用 Python 3.5),所以我希望我能提供帮助。以下是我的建议:

  • 如果您还没有安装pip
  • https://www.visualstudio.com/downloads 安装 Visual Studio Community 2015(您只需要 Python 编译工具)
  • 安装轮子:pip install wheel
  • http://www.lfd.uci.edu/~gohlke/pythonlibs/#mysql-python 下载 MySQLdb windows 二进制文件,特别是mysqlclient-1.3.8-cp35-cp35m-win32.whl(我也是 64 位的,但我很谨慎)
  • 如果存在 MySQLdb 文件夹,请将其从 site-packages 中删除,以防万一。
  • 假设您与二进制下载文件位于同一文件夹中,请运行 pip install mysqlclient-1.3.8-cp35-cp35m-win32.whl

如果运气好的话,应该可以连接上。


备注

在我的机器上,我的连接立即中止(Got an error reading communication packets 在我的error.log),即使我的凭据是 100% 正确的。在 Windows 端,类似于 OP,Python 只是“崩溃”了,这意味着我重新启动了 shell,并且从未超过 MySQLdb.connect 行。即使是try 块也不允许进一步执行(因此实际上是崩溃,而不是异常或错误)。考虑到兼容性问题(UNIX 工作正常),我尝试在 Windows 中调试 MySQLdb,一直调试到 import _mysql,这时我才意识到这是一个 C(编译)问题。

以为一切都安装好了,当我执行pip install MySQLdb-python时,我得到了以下信息:

error: Unable to find vcvarsall.bat

这意味着我需要为我的 Python (3.5) 版本安装编译工具,它包含在 VSC2015 安装中。我重新跑了,然后得到如下:

Cannot open include file: 'config-win.h'

这意味着我需要一些必需的标头,来自这里:http://dev.mysql.com/downloads/connector/c/6.0.html#downloads(同样是 32 位,只是为了暂时安全使用)。然后我得到了一堆unresolved external symbol 错误,意识到我是多么讨厌 Windows,并安装了预编译版本。创造了奇迹。

哦,在有人建议使用不同的模块或连接方法之前,例如mysql-connector,除了不能解决问题之外,通常存在相同的代码(因此,相同的导入模块)应该适用于两者的约束Windows 和 UNIX 机器。加上这个:http://charlesnagy.info/it/python/python-mysqldb-vs-mysql-connector-query-performance

抱歉,帖子太长了。我需要发泄!祝你好运!

【讨论】:

  • 感谢您的详细解答!我稍后会尝试您的步骤并回复您。
  • 像魅力一样工作,接受了您的回答。再次感谢!
  • 谢谢。我在这个问题上浪费了很多时间。您的解决方案成功了。
猜你喜欢
  • 2016-01-31
  • 2011-04-08
  • 1970-01-01
  • 2013-05-06
  • 2011-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-18
相关资源
最近更新 更多