Alembic 自动生成空迁移文件
Posted
技术标签:
【中文标题】Alembic 自动生成空迁移文件【英文标题】:Alembic autogenerate empty migration file 【发布时间】:2020-11-05 03:19:00 【问题描述】:我正在尝试将 alembic
库连接到 databases 和 sqlalchemy
库。作为指导,我使用这个例子link
我的项目文件:
db.py
from databases import Database
from sqlalchemy import MetaData, create_engine
DATABASE_URL = "postgresql://....@localhost:5432/db"
engine = create_engine(DATABASE_URL)
metadata = MetaData()
database = Database(DATABASE_URL)
models.py
from sqlalchemy import Table, Column, Integer, String, DateTime
from sqlalchemy.sql import func
from db import metadata
notes = Table(
"notes",
metadata,
Column("id", Integer, primary_key=True),
Column("title", String(50)),
Column("description", String(50)),
Column("created_date", DateTime, default=func.now(), nullable=False),
)
env.py(蒸馏器设置)
from db import DATABASE_URL, metadata
....
#add new
target_metadata = metadata
...
#change
def run_migrations_online():
config.set_main_option('sqlalchemy.url', str(DATABASE_URL))
connectable = engine_from_config(
config.get_section(config.config_ini_section),
prefix="sqlalchemy.",
poolclass=pool.NullPool,
)
当我跑步时
alembic revision --autogenerate -m 'Add notest table'
在迁移/版本中创建此上下文的新文件
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
pass
# ### end Alembic commands ###
def downgrade():
# ### commands auto generated by Alembic - please adjust! ###
pass
# ### end Alembic commands ###
我想这可能与使用 target_metadata = metadata 变量有关。似乎一切都按照说明进行,但迁移并没有按预期工作。
【问题讨论】:
【参考方案1】:如果有人有类似的问题。您所要做的就是在 metadata
对象之前将 models.py 中的表导入到 env.py 文件中。
env.py
...
from models.notes import notes
from db import DATABASE_URL, metadata
...
【讨论】:
如果不导入这些类,则永远不会定义这些类,并且永远不会填充元数据。 @GabrielCappelli 但是如果我有几十个甚至上百个模型,我该怎么办?全部导入?也许有比from mymodels import *
更好的方法?
您可以尝试动态导入它们。 ***.com/questions/301134/…以上是关于Alembic 自动生成空迁移文件的主要内容,如果未能解决你的问题,请参考以下文章