2

Eclipse/Pydevで使用するPython3.2用のSQLAlchemyをインストールしてみました。単純なテストスクリプトは失敗します

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

それを機能させる方法を知っていますか?

4

2 に答える 2

4

答えは簡単です。メインモジュールの名前はsqlalchemy.pyです。これは、Python 2に陥りやすいトラップです。つまり、システムモジュールと同じ名前で独自のモジュールに名前を付けます。

起動時にsqlalchemy.py、モジュールとしてpythonによってロードされ、最初の行が実行されると、pythonがモジュールとして__main__リロードされます。インポート行が2回実行されると、Pythonインタープリターはすでにで検出されますが、という名前の変数またはモジュールは含まれていません。sqlalchemy.pysqlalchemysqlalchemysys.modulesengine

簡単に修正するには、名前sqlalchemy.pyをたとえばに変更しますsatest.py。より完全なソリューションについては、コードをパッケージに整理してください。

于 2012-07-06T16:09:33.157 に答える
1

アンティが説明したように、最初のエラーは不幸な間違いでしたが、私はついに他の問題も解決しました。MySQLdbをインストールしていませんでした。これもMySQLサーバーが必要です。代わりに、正しい構文であるmysql-connectorがあります

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

簡単なテスト例を探している間、私はこれを見ませんでした。

于 2012-07-06T16:35:31.477 に答える