【问题标题】:Auto Generating Migrations using alembic使用 alembic 自动生成迁移
【发布时间】:2012-06-26 03:47:54
【问题描述】:

在教程中: 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 创建它。怎么做?非常感谢!

【问题讨论】:

标签: python sqlalchemy database-migration alembic


【解决方案1】:

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

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

  1. 首先,您需要在 Python 代码中定义数据模型,通常 通过一堆使用 sqlalchemy 的类声明 “声明性”建模结构。这发生在一个名为 'mymodel.py'。或者,如果您的应用程序更大,您可能有多个文件,然后将它们全部导入 mymodel.py 以将它们的符号合并为一个方便 命名空间。这个 mymodel.py —— 或者你命名的任何东西—— 会 位于名为 myapp 的目录中。你会指出 python 通过将__init__.py 文件放入其中,'myapp' 是一个模块(可以是 空的,或者里面可以有其他东西......阅读python项目 和模块结构有关这方面的更多信息,请参阅下面 #3 中的链接)。

  2. 稍后您更改了模型定义 一个或多个文件,它离开了您的实际数据库架构(作为您的 数据库引擎会看到它,就像您在 GUI 中看到它的方式一样,或者 命令行数据库管理客户端)落后了一步。所以现在你 需要一个系统来发出必要的命令来修复 差异。

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

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

【讨论】:

  • 非常感谢!这正是我作为初学者应该遵循的。
猜你喜欢
  • 2020-11-05
  • 2013-06-16
  • 1970-01-01
  • 1970-01-01
  • 2016-05-21
  • 1970-01-01
  • 2012-09-06
  • 1970-01-01
  • 2013-03-17
相关资源
最近更新 更多