为什么 alembic 不自动生成?

Why is alembic not autogenerating?

我正在学习烧瓶。使用 sqlalchemy 进行 orm 和 alembic 进行迁移 经历并跟随: http://alembic.readthedocs.org/en/latest/autogenerate.html

每当我传递命令“alembic revision --autogenerate -m 'name'”时,都会弹出此错误。无论我做什么,我都配置了 config.py 文件,但我认为我可能以错误的方式配置了 env.py 文件。或者因为我按照教程的每一步做错了。

File "alembic/env.py", line 20, in <module>
from myapp.mymodel import Base
ImportError: No module named app.models




folder directory:
project/
       app/
          models.py
          views.py
          __init__.py
       alembic/
              versions
              env.py
       config.py

当您运行 alembic 命令时,您的应用程序包不在Python 的模块路径中。所以不能导入。解决此问题的最简单方法是同时使用 Flask-Migrate or Flask-Alembic to handle setting up the migration environment for you. Both these extensions require you to use Flask-SQLAlchemy 等扩展名。

如果您不想使用扩展,快速而肮脏的方法是强制包含您的应用程序包的目录位于路径中。在env.py中,在导入Base之前,添加

import os, sys
sys.path.insert(0, os.path.realpath(os.path.join(os.path.dirname(__file__), '..')))

更好的解决方案是使用 setup.py 文件正确设置项目并以可编辑模式安装包:pip install -e .。然后你的包就会在 "right" 路径上,就好像它是实际安装的一样。

你应该使用export PYTHONPATH='.'

您需要将绝对路径添加到您的 alembic 文件夹所在的根目录。 例如:

如果您当前的文件夹结构是:

 .
├── app
│   ├── alembic
│   │   ├── env.py
│   │   ├── __pycache__
│   │   ├── README
│   │   ├── script.py.mako
│   │   └── versions
│   ├── alembic.ini
│   ├── constants
│   ├── core
│   ├── enums
│   ├── models
│   ├── repository
│   ├── routes
│   ├── __init__.py
│   ├── main.py

并且您的应用的绝对路径为:

/home/username/dev/app

然后运行以下行在你的 ~/.bashrc 或 ~/.zshrc 中添加用于本地开发的路径并更新 env 变量。

echo "export $PYTHONPATH=$PYTHONPATH:/home/username/dev/app" >> ~/.bashrc
source ~/.bashrc

echo "export $PYTHONPATH=$PYTHONPATH:/home/username/dev/app" >> ~/.zshrc
source ~/.zshrc