SQLAlchemy在Pydev / Eclipse中导入错误

时间:2012-07-06 15:19:00

标签: python sqlalchemy pydev

我尝试安装SQLAlchemy for Python 3.2,我在Eclipse / Pydev中使用它。一个简单的测试脚本失败

from sqlalchemy.engine import create_engine
engine=create_engine("mysql://user:password@server/database")

如果我从Eclipse运行它,我会得到

Traceback (most recent call last):
  File "...\sqlalchemy.py", line 1, in <module>
    from sqlalchemy.engine import create_engine
  File "...\sqlalchemy.py", line 1, in <module>
    from sqlalchemy.engine import create_engine
ImportError: No module named engine

然而,我实际上使用Ctrl-Shirt-O生成了导入行,因此Eclipse自动发现并了解它。 Pydev也没有在脚本中显示任何错误。

如果我在交互式Pydev控制台中尝试相同的脚本,我会得到

from sqlalchemy.engine import create_engine
engine=create_engine("mysql://user:password@server/database")
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Python32\lib\site-packages\sqlalchemy-0.7.8-py3.2.egg\sqlalchemy\engine \__init__.py", line 338, in create_engine
    return strategy.create(*args, **kwargs)
  File "C:\Python32\lib\site-packages\sqlalchemy-0.7.8-py3.2.egg\sqlalchemy\engine\strategies.py", line 64, in create
    dbapi = dialect_cls.dbapi(**dbapi_args)
  File "C:\Python32\lib\site-packages\sqlalchemy-0.7.8-py3.2.egg\sqlalchemy\connectors\mysqldb.py", line 52, in dbapi
    return __import__('MySQLdb')
ImportError: No module named MySQLdb

你知道如何让它发挥作用吗?

2 个答案:

答案 0 :(得分:5)

答案很简单:您的主模块名为sqlalchemy.py。这是一个更容易陷入python 2的陷阱 - 用与系统模块相同的名称命名自己的模块。

启动时,sqlalchemy.py由python作为__main__模块加载,当第一行运行时,python重新加载sqlalchemy.py作为模块sqlalchemy;第二次运行导入行时,python解释器已在sqlalchemy中找到sys.modules,但它不包含名为engine的变量或模块。

为便于修复,请将sqlalchemy.py重命名为satest.py。要获得更完整的解决方案,请在包中组织代码。

答案 1 :(得分:1)

虽然第一个错误是Antti所解释的一个不幸的错误,但我终于解决了另一个问题。我没有安装MySQLdb,这又需要MySQL服务器。相反,我有mysql-connector,正确的语法是

engine=create_engine("mysql+mysqlconnector://...")

在寻找快速测试示例时,我没有看到这一点。