Python属性错误:'module'对象没有属性'connect'。

16

我正在尝试使用Ubuntu(Xubuntu 14.04)和预安装版本的Python创建一个带有sqlite3数据库的程序。 我尝试了一下第一行是否起作用,但已经出现了错误。 我安装了"python-sqlite"和"sqlite3"。 有人可以帮忙吗?

import sqlite3 

connection = sqlite3.connect('test.db')
cursor = connection.cursor()

cursor.execute('CREATE TABLE test ( id INTEGER, first INTEGER, second TEXT, third TEXT, other INTEGER)')

connection.commit()

输出结果为:

user@device:~/folder$ python sqlite3.py 
Traceback (most recent call last):
File "sqlite3.py", line 1, in <module>
import sqlite3 
File "/home/michael/ownCloud/sqlite3.py", line 3, in <module>
connection = sqlite3.connect('test.db')
AttributeError: 'module' object has no attribute 'connect'

谢谢您的提前帮助!

5个回答

19

错误信息显示您已将文件命名为sqlite3.py

/home/michael/ownCloud/sqlite3.py"

这会掩盖同名的标准模块,导致名称屏蔽陷阱。你的sqlite3.py没有定义connect函数,因此会出现错误。

解决方案是将文件重新命名为其他名称。

正如Jim Raynor所指出的,导入sqlite3还会在/home/michael/ownCloud/中创建一个.pyc文件,该文件也必须在找到标准库中的sqlite3模块之前被删除。


就是这样!非常感谢。 - mschoenwaelder
1
值得注意的是,如果文件命名不正确,还应该删除同一文件夹中生成的sqlite3.pyc文件。 - Jim Raynor

2

您需要更改脚本名称。 sqlite3 是您要导入的包和脚本的名称,因此Python会导入您的脚本而不是包,从而导致错误。


0

将您的脚本从“sqlite3.py”重命名为“something else.py”。Python解释器很难区分您的脚本和内置模块sqlite3。 当您运行脚本时,出现“AttributeError:'module'对象没有属性'connect'”的行告诉您,它读取自身并假定它是内置的sqlite3模块,显然不包含连接属性。


0

我无法在此回答您的输入,但现在我已经解决了。

就像你所说的那样,但仅重命名原始文件是不够的。 您还必须删除*.pyc文件。 我只重命名了有问题的 文件名,因为它没有起作用,所以我搜索了其他选项。

这很棘手,因为错误消息是误导性的。

无论如何。 我现在已经解决了。 感谢您的输入。

通常情况下,当您编写代码时,您经常会键入要编写的文件名, 例如:Hello World。

因此,文件名命名为helloworld.py

并且按照这种名称约定的精神,我命名了我的Python文件。

sqlite3.py

我从来没有想到这个决定会给我带来这么多烦恼。 我写了适当的代码,但由于某些原因无法通过错误。

找不到模块错误:sqlite3

这显然告诉我,出于某种原因,我没有那个模块。 无论如何,使用pip命令freeze将解决这个问题。

奇怪的是,在sqlite3列表中没有任何模块。这让我陷入了一场漫长的寻找之旅。 显然我缺少了这个模块。

这很奇怪,因为我有一个Python ver. 3.8.2 并且它配备了内置的sqlite3模块。

但我无法验证它。

我到处搜索,所有我找到的建议都倾向于认为 我的Python安装中缺少了一些东西。我尝试了所有方法,但都没有成功。 然后经过大约2-3天的研究,我找到了这个线程。

它说Python无法区分模块名或文件名, 如果它们具有完全相同的名称。

按照这里的解决方案。太容易了。

将您的sqlite3.py文件另存为新文件名,与其他文件不同。 然后找到名为*.pyc的Python缓存文件,删除*.pyc文件。

现在一切都正常了。

所以即使通过pip freeze命令没有列出模块sqlite3,它显然一直内置在另一个模块中。

请注意,我没有重新安装任何东西或添加其他模块来使其工作。 只是将py文件重命名或保存为不同的名称,并删除*.pyc文件。没有其他更改。


您介意重新构建您的答案,使其更易读吗?首先将您的代码放入代码块中,并可能清晰地演示您的建议如何工作,这将使每个人都更容易阅读。 - Unpossible

0
我曾经遇到过同样的错误,但最终找到了解决方法: “将您的程序复制并粘贴到另一个.py文件中,然后删除之前出现错误的文件,保存并运行即可。” 问题就会得到解决。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接