【问题标题】:Alembic autogenerate empty migration fileAlembic 自动生成空迁移文件
【发布时间】:2020-11-05 03:19:00
【问题描述】:

我正在尝试将 alembic 库连接到 databasessqlalchemy 库。作为指导,我使用这个例子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 变量有关。似乎一切都按照说明进行,但迁移并没有按预期工作。

【问题讨论】:

    标签: sqlalchemy alembic fastapi starlette


    【解决方案1】:

    如果有人有类似的问题。您所要做的就是在 metadata 对象之前将 models.py 中的表导入到 env.py 文件中。

    env.py

    ...
    from models.notes import notes
    from db import DATABASE_URL, metadata
    ...
    

    【讨论】:

    • 如果不导入这些类,则永远不会定义这些类,并且永远不会填充元数据。
    • @GabrielCappelli 但是如果我有几十个甚至上百个模型,我该怎么办?全部导入?也许有比from mymodels import *更好的方法?
    • 您可以尝试动态导入它们。 stackoverflow.com/questions/301134/…
    猜你喜欢
    • 2013-06-16
    • 2012-06-26
    • 1970-01-01
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 1970-01-01
    • 2013-05-25
    相关资源
    最近更新 更多