我想将alembic revision --autogenerate与我自己的模型类一起使用。因此,我需要将它们导入myproject/alembic/env.py中作为described in the docs。但是,即使我尝试了很多变体,这也不起作用。

我不确定在哪种情况下(不知道这是不是正确的单词)alembic运行env.py。也许会导致一些错误。

这是我使用的目录和文件结构。

myproject/
    common/
        __init__.py
        model.py
    alembic/
        env.py

错误是那种
    from .common import model
SystemError: Parent module '' not loaded, cannot perform relative import
myproject本身只是一个存储库/工作目录。它没有安装到系统中(带有pip3apt-geteasyinstall或其他任何东西)。

最佳答案

大约花了几个小时研究这个相同的问题,我找到了一个解决方案。首先,这是我现在的结构:

. ← That's the root directory of my project
├── alembic.ini
├── dev-requirements.txt
├── requirements.txt
├── runtime.txt
├── setup.cfg
├── src
│   └── models
│       ├── base.py
│       ...
│       └── migrations
│           ├── env.py
│           ├── README
│           ├── script.py.mako
│           └── versions
│          
└── tests

env.py中,我只是这样做:
import sys
from os.path import abspath, dirname
sys.path.insert(0, dirname(dirname(dirname(abspath(__file__))))) # Insert <.>/src
import models # now it can be imported
target_metadata = models.base.Base.metadata

希望你觉得这个有用! :)

编辑:然后,我在数据库为空(没有表)的情况下进行了第一次修订,alembic自动为upgrade()downgrade()填充了所有内容。我这样做是因为并不是所有的桌子都被Alembic自动检测到。

关于python-3.x - 如何将自己的模型导入myproject/alembic/env.py?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32032940/

10-12 19:20