Alembic 自动生成空迁移文件

问题描述 投票:0回答:2

我正在尝试将

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)

模型.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(alembic 设置)

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 = 元数据变量的使用有关。似乎一切都按照说明进行,但迁移并未按预期进行。

sqlalchemy alembic fastapi starlette
2个回答
15
投票

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

metadata
对象之前。

env.py

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

0
投票

我有一个不同的解决方案(或遇到不同的问题),以防有人遇到这个问题。我的问题是数据库已经创建,然后我添加了 alembic。因为它正在积极地查看数据库并将其与代码进行比较,所以我不断得到空白迁移。因此,创建一个空数据库作为起点就能够产生我的初始迁移。

© www.soinside.com 2019 - 2024. All rights reserved.