AttributeError:模块'mysql'没有属性'connector'

Posted

技术标签:

【中文标题】AttributeError:模块\'mysql\'没有属性\'connector\'【英文标题】:AttributeError: module 'mysql' has no attribute 'connector'AttributeError:模块'mysql'没有属性'connector' 【发布时间】:2018-03-12 05:47:45 【问题描述】:

我正在运行 Ubuntu 16.04,试图在 python 中连接到 mysql

    import mysql
    username = 'root'

    cnx = mysql.connector.connect(user=username, database='db')
    cnx.close()

但我得到一个错误:

    File "pysql1.py", line 4, in <module>
      cnx = mysql.connector.connect(user=username, database='db')
    AttributeError: module 'mysql' has no attribute 'connector'

我通过下载包here安装了mysql python模块。我试过sudo apt-get install python-mysql.connector 无济于事。有什么指点吗?

编辑:添加import mysql.connector 后,我得到了一个无关的权限错误,我现在已经解决了,所以这就是我需要的很多!!!

【问题讨论】:

试试import mysql.connector Exception 'module has no attribute connector' - Python mysql的可能重复 @kev1n91 这似乎是关于我从未听说过的_mysql。在最佳答案的最后,他们认为图书馆存在一些混乱 尽管如此,该解决方案也显示了一种可能解决此问题的方法:您是否尝试将其包含在 IPython(Spyder 或类似的东西)中,并查看选项卡自动完成是否可以使用连接器? @PRMoureu 不,ty。我没有正确完成 OWN 链接中的步骤:o 按照这些说明正确解决了问题。 【参考方案1】:

解决办法是执行:

import mysql.connector # or from mysql import connector

因为模块 connector 仅在您明确导入时可用:

import mysql

print(dir(mysql))
>>> ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', 
'__package__', '__path__', '__spec__']

import mysql.connector

print(dir(mysql))
>>> ['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', 
'__package__', '__path__', '__spec__', 'connector']

模块mysql 中的__init__ 文件不会导入模块connector

mysql
|_______ __init__.py # no import at this level
|_______ connector
         |________ __init__.py

如果 connector 被导入到 __init__ 中,这可能会隐式工作:from . import connector

【讨论】:

是的,结构保持不变,只有模块级别的导入才能更容易 这让我想知道为什么他们一开始没有以这种方式实现它,但我想你对此不负责任:)【参考方案2】:

import mysql.connector 并检查权限后,我仍然遇到同样的错误。我正在使用 bash 在 MacOS 上运行我的脚本。在寻找解决方案数小时后,在 mysql 论坛上看到了这篇文章:https://forums.mysql.com/read.php?50,584171,584729#msg-584729

海报提到你的python脚本不能命名为mysql.py我的脚本被命名为types.py,所以我将它重命名为setup-types.py,这解决了我的问题。希望这可以在处理同样的错误时为其他人节省一些时间。

【讨论】:

谢谢!我也是python新手,这可能是一个常见的错误 我在同一个文件夹中有另一个名为“select.py”的脚本,这也导致了«No module named 'Connection'»【参考方案3】:

还有一个观察。在许多教程中,他们没有以相同的方式安装 python 连接器。在那些时候,导入语句可能是问题的原因。试试下面的 import 语句。

import mysql.connector as mysql

【讨论】:

恕我直言,将模块的属性重命名为模块本身是一个可怕的想法。这很容易让某人混淆为什么mysql 没有/没有预期的属性/方法可用。最好使用 import mysql.connnector as mysqlConnectorimport mysql.connector 之类的东西【参考方案4】:

问题是我创建了一个名为“select.py”的脚本,我重命名了它,它又可以工作了。

【讨论】:

以上是关于AttributeError:模块'mysql'没有属性'connector'的主要内容,如果未能解决你的问题,请参考以下文章

AttributeError: type object '_io.StringIO' has no attribute 'StringIO'

AttributeError:模块 'dbus' 没有属性 'lowlevel'

AttributeError:模块'keras'没有属性'initializers'

AttributeError:模块'asyncio'没有属性'run'

AttributeError:“模块”对象没有属性“作者”

AttributeError:模块 'urllib' 没有属性 'parse'