Python 请求一个用于自动生成迁移的简单alembic工作示例

Python 请求一个用于自动生成迁移的简单alembic工作示例,python,orm,sqlalchemy,data-migration,alembic,Python,Orm,Sqlalchemy,Data Migration,Alembic,我在ubuntu上安装了alembic 0.3.4、sqlalchemy、SQLite 3.7.4版,并将sqlalchemy 0.6.4升级为sqlalchemy 0.7或更高版本。 我接着说: 现在我正在测试:自动生成迁移 我已经在schemas:init.py下创建了一个包:schemas和一个包标记 定义了一行: __all__ = ["teacher"] 我还在schemas目录中创建了一个模块文件:dbmodel.py,其内容如下 Base = declarative_base()

我在ubuntu上安装了alembic 0.3.4、sqlalchemy、SQLite 3.7.4版,并将sqlalchemy 0.6.4升级为sqlalchemy 0.7或更高版本。 我接着说:

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

__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
回溯(最近一次呼叫最后一次):
文件“/usr/local/bin/alembic”,第9行,在
加载入口点('alembic==0.3.4','console脚本','alembic')()
文件“/usr/local/lib/python2.7/dist packages/alembic-0.3.4-py2.7.egg/alembic/config.py”,第229行,主目录
**kwarg中k的dict((k,getattr(options,k)))
文件“/usr/local/lib/python2.7/dist packages/alembic-0.3.4-py2.7.egg/alembic/command.py”,第93行,修订版
script.run_env()
文件“/usr/local/lib/python2.7/dist packages/alembic-0.3.4-py2.7.egg/alembic/script.py”,第188行,运行环境
加载python文件(self.dir,'env.py')
文件“/usr/local/lib/python2.7/dist packages/alembic-0.3.4-py2.7.egg/alembic/util.py”,第185行,加载python文件
模块=imp.load\u源(模块id,路径,打开(路径'rb'))
文件“alembic/env.py”,第20行,在
从schemas.dbmodel导入库
ImportError:没有名为schemas.dbmodel的模块

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

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

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

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

那么,在您的代码中,sqlite数据库的url在哪里?我从一个使用sqlalchemy迁移的现有pyramid应用程序中获得了这个功能。为了让它工作,我必须像金字塔一样引导url/db连接,然后从那里加载我的模型库。在文件:alembic.ini中,我对其进行了配置并添加了一行:sqlalchemy.url=sqlite:///test 这对将架构更改迁移到我的测试数据库起到了作用。谢谢。您是对的,尽管我的代码仍然存在一些问题,但至少数据模块路径现在可以正常工作。您为我节省了很多时间:)我最近发现我们需要通过添加当前模块路径来配置PYTHONMATH变量。它有效。我曾经面临过类似的问题,现在它有效了。。这是解决我问题的问题和答案。试过了,我得到了配置包。下面是我从配置导入应用程序db中添加的
import os import sys.path.append(os.getcwd())内容