5

チュートリアル: http://alembic.readthedocs.org/en/latest/tutorial.html 以下のコマンドで自動生成マイグレーション機能をテストしました:

alembic revision --autogenerate -m "Added account table"

エラーが発生しました:

Traceback (most recent call last):
File "/usr/local/bin/alembic", line 9, in <module>
load_entry_point('alembic==0.3.4', 'console_scripts', 'alembic')()
File "/usr/local/lib/python2.7/dist-packages/alembic-0.3.4-py2.7.egg/alembic/config.py", line 229, in main
 **dict((k, getattr(options, k)) for k in kwarg)
File "/usr/local/lib/python2.7/dist-packages/alembic-0.3.4-py2.7.egg/alembic/command.py", line 93, in  revision
script.run_env()
File "/usr/local/lib/python2.7/dist-packages/alembic-0.3.4-py2.7.egg/alembic/script.py", line 188, in run_env
 util.load_python_file(self.dir, 'env.py')
File "/usr/local/lib/python2.7/dist-packages/alembic-0.3.4-py2.7.egg/alembic/util.py", line 185, in load_python_file
module = imp.load_source(module_id, path, open(path, 'rb'))
File "alembic/env.py", line 20, in <module>
from myapp.mymodel import Base
ImportError: No module named myapp.mymodel

私はalembicを学んでいて、pythonも使ったことがありません。myapp.mymodel は既に存在しますか、それとも python を使用して作成する必要がありますか。どうやってするか?どうもありがとうございました!

4

1 に答える 1

22

「myapp.mymodelはすでに存在しますか、それともpythonを使用して作成する必要があります。その方法は?」-それを求めているのなら、移行する必要のあるものがまだないように聞こえます。

Alembicの移行のアイデアは、次のようになります。

  1. まず、Pythonコードでデータモデルを定義します。通常は、sqlalchemyの「宣言型」モデリング構造を利用した一連のクラス宣言によって定義されます。これは、「mymodel.py」というファイルで発生します。または、アプリが大きい場合は、このための複数のファイルがあり、それらすべてをmymodel.pyにインポートして、それらのシンボルを1つの便利な名前空間にまとめることができます。このmymodel.py(または名前を付けたもの)は、myappというディレクトリ内にあります。'myapp'がモジュールであることをPythonに示すには、__init__.pyファイルを挿入します(空にすることも、他のものを含めることもできます...詳細については、Pythonプロジェクトとモジュール構造を参照してください。リンクを参照してください。以下の#3)。

  2. 後で、その1つまたは複数のファイルのモデル定義を変更したため、実際のデータベーススキーマが残りました(GUIまたはコマンドラインデータベース管理クライアントで表示されるのと同じように、データベースエンジンで表示されます)。一歩遅れる。したがって、違いを修正するために必要なコマンドを発行するシステムが必要になります。

  3. そこでAlembicが登場します。2つのことを確認する必要があります。データベース接続文字列を指定する実際のデータベースと、mymodel.pyなどのPythonファイルで検出されると予想されるデータモデル定義です。またはあなたがそれに与えるかもしれないどんな名前でも。.pyで終わる名前を付けることができ、Alembicにインポートさせることができる限り、任意の場所に配置できます。それを行うメカニズムが不明な場合は、モジュールがファイルシステムでどのように構造化され、それに応じてどのようにインポートするかを学ぶ必要があるのは、一般的なPythonイディオムです。これがその始まりです:http ://docs.python.org/tutorial/modules.html

モデル宣言を含むPythonファイルとして既に認識しているものがない場合は、移行などの問題を心配する前に、sqlalchemyをさらに練習する必要がある場合があります。

于 2012-06-25T16:33:57.143 に答える