chi*_*sky 8 python sqlalchemy alembic
我正在尝试--autogenerate使用 Alembic 为两个模型创建一个修订版,但收到重复的表键错误。是否需要指定模式?如果可以,如何设置?我读过的文档说要使用__table_args__ = {'schema': 'somename'},但这并没有帮助。非常感谢任何提示或建议。
我目前的设置是:
基础文件
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
Run Code Online (Sandbox Code Playgroud)
工作区.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)
Run Code Online (Sandbox Code Playgroud)
主机.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)
Run Code Online (Sandbox Code Playgroud)
alembic/env.py
from host import HostModel
from workspace import WorkspaceModel
target_metadata = [HostModel.metadata, WorkspaceModel.metadata]
Run Code Online (Sandbox Code Playgroud)
错误
ValueError: Duplicate table keys across multiple MetaData objects: "hosts", "workspaces"
Run Code Online (Sandbox Code Playgroud)
为了从@esdotzed和@univerio所说的内容中清楚地看出,您必须使用单个Base.metadata- 但仍然import是单个模型。
在最初的问题中,这alembic/env.py应该是这样的:
from base import Base
# This two won't be referenced, but *have* to be imported to populate `Base.metadata`
from host import HostModel
from workspace import WorkspaceModel
target_metadata = Base.metadata
Run Code Online (Sandbox Code Playgroud)
如果您没有import两个模型,自动生成的迁移最终会删除您的整个数据库 - 因为Base.metadata它本身不知道任何模型。
| 归档时间: |
|
| 查看次数: |
2675 次 |
| 最近记录: |