我正在尝试创建一个迁移脚本,该脚本将创建一个表(将产生多对多关系),然后使用数据库中的外键填充该表。
要做到这一点,我正在尝试加载我的烧瓶应用程序ORM模型,以便我可以在我的迁移脚本中使用它们。
/home/alord/git/my_project/ # project directory
/home/alord/git/my_project/alembic_testing # migration directory
/home/alord/git/my_project/my_project #requirement of flask modules
/home/alord/git/my_project/runserver.py # script that starts development server
/home/alord/git/my_project/alembic.ini # alembic configuration
/home/alord/git/my_project/development_config.py # development server configuration
如果我运行alembic升级+1
import os
print os.getcwd()
print os.path.dirname(os.path.realpath(__file__))
in
/home/alord/git/my_project/alembic_testing/env.py
我得到了
/home/alord/git/my_project
/home/alord/git/my_project/alembic_testing
我正在放置
import os.path
sys.path.append(
os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir)))
import my_project
在我的升级脚本中,然后运行命令
alembic upgrade +1
我正在收到错误
的堆栈跟踪ImportError: No module named my_project
如果没有尝试导入,表升级和降级功能可以正常运行。
我希望能够导入包,更重要的是* my_project.models *,以便我可以使用ORM填充我的新表。
注意: 我不能使用相对包,因为我正在运行alembic而不是调用python。因此,python -m参数对我没用。
答案 0 :(得分:0)
将您的script_location
修改为alembic.ini
以指向正确的位置,然后从您的存储库的根目录alembic
运行/home/alord/git/
,并且您不应该&#39 ; t需要任何sys.path
hijinks才能导入您的应用。
答案 1 :(得分:0)
尝试从alembic中的修订文件导入会导致两个目录而不是一个目录。
所以我最终打印了 sys.path 以查看实际包含的目录。当我注意到包含的路径是
/home/alord/git/my_project/alembic_testing
而不是
/home/alord/git/my_project/alembic_testing
我做了我的路径。使用
再添加一个目录import sys
import os.path
#hacky solution to get to the root application directory.
sys.path.append(
os.path.abspath(
os.path.join(
os.path.join(
os.path.dirname(__file__),
os.path.pardir),
os.path.pardir)))