为什么python的sqlite3模块试图从我的项目目录导入datetime?

时间:2013-01-22 20:26:34

标签: python sqlite python-module

我正在尝试按照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'

2 个答案:

答案 0 :(得分:4)

只需将/home/brian/dev/py/datetime.py模块重命名为datetime.py以外的模块,因为它与datetime内置模块具有相同的名称。

请避免使用与标准库或内置模块名称相同的名称来命名模块。

答案 1 :(得分:2)

更详细一点,有一个名为datetime的Python内置模块,用于管理 - 嗯,你知道。

您已创建名为datetime.py的文件,该文件对应于名为datetime的模块。由于sqlite想要使用Python内置的datetime模块,它会导入它 - 但是你在同一目录中创建了一个具有相同名称的文件,这意味着Python的优先级规则将选择在内置的。

作为类比,如果您在工作目录中创建了一个文件sqlite3.pyimport sqlite3将为您提供该模块而不是内置模块。

故事的道德:不要影响内置名称。