使用alembic自动生成迁移

use*_*336 5 python sqlalchemy database-migration alembic

在教程中:http: //alembic.readthedocs.org/en/latest/tutorial.html 我通过以下命令测试了自动生成迁移功能:

alembic revision --autogenerate -m "Added account table"
Run Code Online (Sandbox Code Playgroud)

并得到错误:

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
Run Code Online (Sandbox Code Playgroud)

我刚刚学习了alembic,也从未使用过python.myapp.mymodel已经存在,或者我需要使用python创建它.怎么做?非常感谢你!

cda*_*ddr 20

"myapp.mymodel已经存在,或者我需要使用python创建它.怎么做?" - 如果你问的话,听起来好像你还没有任何需要迁移的东西.

迁移的想法,即la Alembic,如下所示:

  1. 首先,您的数据模型在您的python代码中定义,通常由一堆使用sqlalchemy的"声明性"建模构造的类声明.这发生在名为"mymodel.py"的文件中.或者,如果您的应用程序较大,则可能有多个文件,然后将它们全部导入mymodel.py,以将其符号放入一个方便的命名空间.这个mymodel.py - 或任何你的名字 - 然后将在一个名为myapp的目录中.你可以向python表明'myapp'是一个模块,通过__init__.py在其中放入一个文件(可以是空的,或者可以包含其他内容...阅读python项目和模块结构以获取更多信息,请参阅链接#3下面).

  2. 稍后您在该文件或文件中更改了模型定义,这些文件已经离开了您的实际数据库模式(正如您的数据库引擎所看到的那样,就像您在GUI或命令行数据库管理客户端中看到的那样)a落后.所以现在你需要一个系统来发布必要的命令来修复差异.

  3. 这就是Alembic的用武之地.它需要看两件事:你的实际数据库,这就是你为它提供数据库连接字符串的原因,以及你希望在python文件中找到的数据模型定义,例如mymodel.py或者你给它的任何名字.它可以命名为以.py结尾的任何内容,并且可以按照您希望的任何方式定位,只要您可以让Alembic导入它.如果您不清楚这样做的机制,那么您只需要学习一般的python习语 - 如何在文件系统中构建模块以及如何相应地导入它们.这是一个开始:http://docs.python.org/tutorial/modules.html

如果您没有任何已经识别为包含模型声明的python文件的内容,那么您可能需要在担心迁移等问题之前需要更多地使用sqlalchemy.