我正在尝试按照python manual提供的与SQLite接口的示例。第一行代码似乎无法正常工作:
import sqlite3
因此,尝试导入python的sqlite3模块试图从调用脚本目录而不是它所在的任何地方导入python的datetime,如下面的回溯所示。我无法弄清楚为什么。我错过了什么?
Traceback (most recent call last):
File "sqlite_test.py", line 3, in <module>
import sqlite3
File "/usr/lib/python2.7/sqlite3/__init__.py", line 24, in <module>
from dbapi2 import *
File "/usr/lib/python2.7/sqlite3/dbapi2.py", line 24, in <module>
import datetime
File "/home/brian/dev/py/datetime.py", line 3, in <module>
now = datetime.now()
AttributeError: 'module' object has no attribute 'now'
答案 0 :(得分:4)
只需将/home/brian/dev/py/datetime.py
模块重命名为datetime.py
以外的模块,因为它与datetime内置模块具有相同的名称。
请避免使用与标准库或内置模块名称相同的名称来命名模块。
答案 1 :(得分:2)
更详细一点,有一个名为datetime
的Python内置模块,用于管理 - 嗯,你知道。
您已创建名为datetime.py
的文件,该文件对应于名为datetime
的模块。由于sqlite
想要使用Python内置的datetime
模块,它会导入它 - 但是你在同一目录中创建了一个具有相同名称的文件,这意味着Python的优先级规则将选择在内置的。
作为类比,如果您在工作目录中创建了一个文件sqlite3.py
,import sqlite3
将为您提供该模块而不是内置模块。
故事的道德:不要影响内置名称。