【发布时间】:2018-06-11 17:52:58
【问题描述】:
我正在尝试使用 Alembic 为两个模型创建带有 --autogenerate 的修订,但我收到了重复的表键错误。是否需要指定架构?如果可以,如何设置?我读过的文档说要使用__table_args__ = {'schema': 'somename'},但这并没有帮助。非常感谢任何提示或建议。
我目前的设置是:
base.py
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
workspace.py
from sqlalchemy import Column, Integer, String
from base import Base
class WorkspaceModel(Base):
__tablename__ = 'workspaces'
id = Column(Integer, primary_key=True)
name = Column(String)
host.py
from sqlalchemy import Column, Integer, String
from base import Base
class HostModel(Base):
__tablename__ = 'hosts'
id = Column(Integer, primary_key=true)
ip = Column(String)
alembic/env.py
from host import HostModel
from workspace import WorkspaceModel
target_metadata = [HostModel.metadata, WorkspaceModel.metadata]
错误
ValueError: Duplicate table keys across multiple MetaData objects: "hosts", "workspaces"
【问题讨论】:
-
target_metadata应该只是target_metadata = Base.metadata。 -
谢谢@univerio。当我尝试这样做时,没有读取模型数据并给了我一个空白迁移; upgrade() 和 downgrade() 不包含任何内容。
-
我确定。 alembic/versions 目录内容被删除,数据库被删除并重新创建。切换到
target_metadata = Base.metadata会生成空白迁移。 -
那你确定你已经正确地导入了所有东西吗?使用
Base.metadata并不意味着您可以删除导入from host import HostModel和from workspace import WorkspaceModel。 -
哇哦,不是在导入模型。这解决了这个问题。如果您作为答案发布,我很乐意接受。当然感谢您的帮助。
标签: python sqlalchemy alembic