【问题标题】:Request a simple alembic working example for Auto Generating Migrations请求一个简单的用于自动生成迁移的 alembic 工作示例
【发布时间】:2020-01-15 04:26:30
【问题描述】:

我从我的 ubuntu 安装了 alembic 0.3.4、sqlalchemy、SQLite 版本 3.7.4,并将 SQLAlchemy 0.6.4 升级到 SQLAlchemy 0.7 或更高版本。 我关注了the instructions linked here

现在我正在测试:自动生成迁移 我创建了一个包:模式和模式下的包标记:init.py 定义了一行:

__all__ = ["teacher"]

我还在 schemas 目录中创建了一个模块文件:dbmodel.py,内容如下

Base = declarative_base()
class teacher(Base):
      __tablename__ = 'teacher' 
      id = Column(Integer, primary_key=True)
      name = Column(String)
      department = Column(String)

顺便说一句,我创建了一个 sqlite 数据库,它运行良好,可以在自动生成迁移之前进行一些测试。我配置了 env.py 文件。增加了两行:

from schemas.dbmodel import Base
target_metadata = Base.metadata

然后我运行:

alembic revision --autogenerate -m "Added teacher 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 schemas.dbmodel import Base
ImportError: No module named schemas.dbmodel

我不知道为什么使用 alembic 测试一个简单的示例对我来说如此困难。我只想将我的应用程序数据模型导入物理数据库模型。有这么复杂吗?谢谢。请知道alembic的人一步一步地给我们一个简单的例子。我想更多的人会从中受益。

【问题讨论】:

  • 那么在您的代码中,sqlite 数据库的 url 是哪里?我从一个使用 sqlalchemy-migrations 的现有金字塔应用程序中得到了这个。为了让它工作,我必须像金字塔一样引导 url/db 连接,然后从那里加载我的模型 Base。 github.com/mitechie/Bookie/blob/develop/dbversions/env.py#L12
  • 在文件:alembic.ini 中,我对其进行了配置并添加了一行:sqlalchemy.url =sqlite:///test 这适用于将架构更改迁移到我的测试数据库。

标签: python orm sqlalchemy data-migration alembic


【解决方案1】:

我还发现 Alembic 找不到我的模型模块。作为一种解决方法,我发现,通过在导入模型之前将以下内容添加到我的env.py,我可以强制它工作:

import os, sys
sys.path.append(os.getcwd())

这可能不是最好的解决方案,但它让 Alembic 自动生成我的迁移。

【讨论】:

  • 谢谢。你是对的,虽然我的代码还有一些问题,但至少数据模块路径现在可以正常工作了。你节省了我很多时间:)
  • 我最近发现我们需要通过添加当前模块路径来配置PYTHONMATH变量。它有效。
  • 我遇到了类似的问题,现在它可以工作了。这是解决我的问题的问题和答案stackoverflow.com/questions/15038036/…
  • 试过了,我在配置包上得到 ImportError。这是我添加的import os import sys sys.path.append(os.getcwd()) from configuration import app, db
猜你喜欢
  • 2012-06-26
  • 1970-01-01
  • 2013-06-16
  • 2020-11-05
  • 2020-06-14
  • 2016-05-21
  • 1970-01-01
  • 2013-05-24
  • 1970-01-01
相关资源
最近更新 更多