首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用alembic自动生成迁移

使用alembic自动生成迁移
EN

Stack Overflow用户
提问于 2012-06-25 02:16:40
回答 1查看 5.7K关注 0票数 5

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

代码语言:javascript
复制
alembic revision --autogenerate -m "Added account table"

并得到错误:

代码语言:javascript
复制
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创建它。如何做到这一点?非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-26 00:33:57

“myapp.mymodel已经存在了吗,或者我需要使用python创建它。该怎么做呢?”--如果您问这个问题,听起来好像您还没有任何需要迁移的东西。

就像Alembic一样,迁移的想法是这样的:

  1. 首先在python代码中定义数据模型,通常是通过一堆类声明来使用sqlalchemy的‘声明性’建模构造。这发生在一个名为'mymodel.py‘的文件中。或者,如果你的应用程序比较大,你可能有多个文件,然后把它们都导入到mymodel.py中,把它们的符号放到一个方便的命名空间中。这个mymodel.py --或者你怎么命名它--将会在一个名为myapp的目录中。您可以通过在其中放入一个__init__.py文件(可以为空,也可以包含其他内容……)来向python指示'myapp‘是一个模块。有关python项目和模块结构的更多信息,请参阅下面#3中的链接)。
  2. 稍后您在该文件或多个文件中更改了模型定义,这会使您的实际数据库模式(正如您的数据库引擎所看到的,就像您在图形用户界面或命令行数据库管理客户端中看到的那样)落后一步。因此,现在您需要一个系统来发出必要的命令来修复differences.
  3. That,这就是Alembic的用武之地。它需要查看两件事:实际的数据库,这就是为什么要为它提供数据库连接字符串的原因;以及数据模型定义,它希望在python文件(如mymodel.py或您给它的任何名称)中找到它。它可以命名为任何以.py结尾的名称,并且可以以任何您希望的方式定位它,只要您可以让Alembic导入它。如果您不清楚执行此操作的机制,那么您只需要学习一个通用的python习惯用法--如何在文件系统中构造模块以及如何相应地导入它们。这是一个开始:http://docs.python.org/tutorial/modules.html

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

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11180013

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档