2012-06-24 21 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