当前位置: 首页 > 知识库问答 >
问题:

Alembic——autogenerate尝试重新创建每个表

解翰采
2023-03-14

我试图第一次针对预先存在的数据库自动生成alembic修订版,但当我运行以下命令时

alembic revision --autogenerate

它生成一个迁移,尝试创建我数据库中的每个表和索引。类似于此:

def upgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.create_table('table1',
    sa.Column('id', sa.SmallInteger(), nullable=False),
    sa.Column('name', sa.String(length=100), nullable=True),
    sa.Column('desc', sa.Text(), nullable=True),
    sa.PrimaryKeyConstraint('id'),
    sa.UniqueConstraint('name'),
    schema='schema1'
    )
    op.create_index(op.f('ix_index1'), 'table1', ['name'], unique=False, schema='schema1')
    ... all my other tables/indexes ..


def downgrade():
    ### commands auto generated by Alembic - please adjust! ###
    op.drop_index(op.f('ix_index1'), table_name='table1', schema='schema1')
    op.drop_table('table1', schema='schema1')
    ... all my other tables/indexes ..

然后,如果我尝试运行迁移,它会失败,因为对象已经存在:

sqlalchemy.exc.ProgrammingError: (ProgrammingError) relation "table1" already exists

所以在我看来,alembic认为我的数据库不包含任何表,但它确实包含。

知道为什么会这样吗?

共有1个答案

东门清夷
2023-03-14

您是否设置了基本元数据的target_metadata?

从留档。

要使用autogenerate,我们首先需要修改环境。这样它就可以访问包含目标的表元数据对象。假设我们的应用程序在myapp中有一个声明基。我的模特。这个数据库包含一个元数据对象,其中包含定义数据库的表对象。我们确保这是在环境加载。py,然后传递到EnvironmentContext。通过target_元数据参数配置()。环境署。为了方便起见,通用模板中使用的py示例脚本在顶部附近已经有了一个变量声明,在这里我们用元数据替换None。首先:

# add your model's MetaData object here
# for 'autogenerate' support
# from myapp import mymodel
# target_metadata = mymodel.Base.metadata 
target_metadata = None

我们改为:

from myapp.mymodel import Base
target_metadata = Base.metadata
 类似资料:
  • 问题内容: 我的Spring-Boot-Mvc-Web应用程序在文件中具有以下数据库配置: 这是我所做的唯一配置。我在任何地方都没有进行任何其他配置。尽管如此,Spring和子系统会在每次Web应用程序运行时自动重新创建数据库。即在系统运行时重新创建数据库,而在应用程序结束后它包含数据。 我不了解此默认值,并期望它适合测试。 但是,当我开始运行测试时,我发现数据库仅重建一次。由于没有按预定义的顺序

  • 在app/src/main中创建一个名为proto的文件夹 在app/src/main/proto中创建和修改文件user_prefs.proto 构建->清理项目->重建项目

  • 我正在尝试为Excel文件中的每一行创建一个单独的XML文档。第1行列出了标记名,A列标识了每行的文档标题。 我在VBA方面相当缺乏经验,但这正是我迄今为止根据对类似问题的多个答案得出的结论。 我还没有完成“GetElementsByTagName”部分,因为该部分导致了问题。对于下一行,我得到错误“Object variable or With block variable not set”。

  • configure脚本创建一个名为'config.status'的文件,用它描述在包最后一次进行配置时 给出的配置选项。该文件是一个shell脚本文件,如果运行它,将重新创建相同的配置。 你可以用'--recheck'选项调用'config.status'以更新它自身。如果你修改了configure, 该选项是有用的,这是因为某些测试的结果可能会与上一次运行的结果不同。选项'--recheck'以

  • 根据以下链接:https://stackoverflow.com/a/20056622/1623597 https://stackoverflow.com/a/15640575/1623597TestNG不会在每个方法测试中创建新实例。 我有spring boot应用程序。我需要编写集成测试(控制器、服务、存储库)。有时为了创建新的测试用例,我需要数据库中的一些实体。为了忘记数据库中任何预定义的实