2012-06-24 30 views
4

在教程: 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 

我剛學蒸餾器,和也從未使用python。是myapp.mymodel已經存在,或者我需要使用python創建。怎麼做?非常感謝你!

+0

我在下面找到的可能有用的網站:http://www.mail-archive.com/[email protected]/msg26799.html – user1342336

回答

20

「myapp.mymodel是否已經存在,或者我需要使用python創建它,怎麼做? - 如果你問這個問題,聽起來好像你還沒有任何需要遷移的東西。

遷移的想法,點菜蒸餾器,是這樣的:

  1. 首先你已讓使用SQLAlchemy的 一堆類聲明的在你的Python代碼中定義你的數據模型,通常 '聲明式'建模結構。這發生在一個名爲 'mymodel.py'的文件中。或者,如果您的應用程序較大,則可能爲此具有多個文件,然後將它們全部導入到mymodel.py,以將其符號帶入一個方便的 名稱空間。這個mymodel.py - 或者任何你命名的 - 然後將 放在名爲myapp的目錄中。您可以通過 python指出'myapp'是一個模塊,通過在其中放入一個__init__.py文件(可以是 爲空,或者可以有其他東西在裏面...請閱讀python項目 和模塊結構瞭解更多,請參閱下面#3中的鏈接)。

  2. 在你已經在 文件或文件改變了你的模型定義一段時間以後,已經離開了您的實際數據庫模式(如您的 數據庫引擎看到它,喜歡的方式,你會看到它在GUI或 命令行數據庫管理客戶端)後面一步。所以現在你需要一個系統來發出必要的命令來修復差異。

  3. 這就是Alembic進來的地方。它需要看兩件事:實際的數據庫,這就是爲什麼你要給它數據庫連接字符串,以及你希望在python文件中找到它的數據模型定義如mymodel.py或任何你可能給它的名字。它可以是 命名以.py結尾的任何內容,並且只要您可以讓Alembic導入它,它就可以以任何方式位於 希望的位置。如果您的操作機制 對您不明確,那麼您只需要學習一下一般Python俚語 - 文件系統中的模塊結構以及如何相應地導入它們。這裏是一個開始 是:http://docs.python.org/tutorial/modules.html

如果你沒有什麼,你已經承認了Python文件,其中包含模型的聲明,這可能是因爲你只需要使用SQLAlchemy的更多的實踐之前的情況你擔心遷移等問題。

+0

非常感謝!這正是我作爲初學者應該遵循的。 – user1342336

+0

不客氣。祝你好運! – cdaddr