Joh*_*ike 2 python flask alembic
因此在Flask中,我models.py包含了所有我的模型定义。我想将其分离到一个models目录下的多个模型文件中。
我通过添加一些模型文件(例如models/user_model.py)models/booking_model.py等进行了尝试,但alembic似乎无法检测到这些文件中的模型。
在带有Flask的标准alembic.ini中,我具有:
# A generic, single database configuration.
[alembic]
# template used to generate migration files
# file_template = %%(rev)s_%%(slug)s
# set to 'true' to run the environment during
# the 'revision' command, regardless of autogenerate
# revision_environment = false
# Logging configuration
[loggers]
keys = root,sqlalchemy,alembic
[handlers]
keys = console
[formatters]
keys = generic
[logger_root]
level = WARN
handlers = console
qualname =
[logger_sqlalchemy]
level = WARN
handlers =
qualname = sqlalchemy.engine
[logger_alembic]
level = INFO
handlers =
qualname = alembic
[handler_console]
class = StreamHandler
args = (sys.stderr,)
level = NOTSET
formatter = generic
[formatter_generic]
format = %(levelname)-5.5s [%(name)s] %(message)s
datefmt = %H:%M:%SRun Code Online (Sandbox Code Playgroud)
我是否需要在此处添加一些内容以使模型识别出来?
你需要编辑你的 env.py:
# add your model's MetaData object here
# for 'autogenerate' support
from your_cool_app.models import *
target_metadata = db.Model.metadata
Run Code Online (Sandbox Code Playgroud)
小智 6
要完成此答案,您可以将所有“基本”直接放入列表,如下所示:
from myapp.mymodel1 import Model1Base
from myapp.mymodel2 import Model2Base
target_metadata = [Model1Base.metadata, Model2Base.metadata]
Run Code Online (Sandbox Code Playgroud)
链接到文档:http : //alembic.zzzcomputing.com/en/latest/autogenerate.html#autogenerating-multiple-metadata-collections
我遇到了完全相同的事情。
这是我的结构
.. alembic
.. .. alembic stuff
.. database
.. .. __init__.py
.. .. models.py
.. .. my_table_one.py
.. .. my_table_two.py
Run Code Online (Sandbox Code Playgroud)
在你的init中创建基础,如下所示:
# creates Base
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
metadata = Base.metadata
Run Code Online (Sandbox Code Playgroud)
然后在我的 models.py 中导入 Base 和所有表
from database import Base
from database.my_table_one import MyTableOne
from database.my_table_two import MyTableTwo
Run Code Online (Sandbox Code Playgroud)
在我的表中,我从数据库模块导入基础
from database import Base
Run Code Online (Sandbox Code Playgroud)
最后我的 env.py 非常简单:
from database.models import Base
target_metadata = [Base.metadata]
Run Code Online (Sandbox Code Playgroud)
这样做的原因是这样我就不必每次添加表时都维护 env.py 。我将其添加到数据库模块中的 models.py 中,仅此而已。
| 归档时间: |
|
| 查看次数: |
1540 次 |
| 最近记录: |