Python SqlAlchemy删除/创建所有重复关系

Python SqlAlchemy删除/创建所有重复关系,python,postgresql,sqlalchemy,Python,Postgresql,Sqlalchemy,使用SQL Alchemy和声明性base定义两个相关表 JiraBase = declarative_base(cls=_Shared) class JiraSource(JiraBase): id = Column(BigInteger, primary_key=True, autoincrement=True) name = Column(String) __tablename__ = 'jira_source' class JiraProject(JiraBa

使用SQL Alchemy和声明性base定义两个相关表

JiraBase = declarative_base(cls=_Shared)

class JiraSource(JiraBase):
    id = Column(BigInteger, primary_key=True, autoincrement=True)
    name = Column(String)
    __tablename__ = 'jira_source'

class JiraProject(JiraBase):
    id = Column(BigInteger, primary_key=True, autoincrement=True)
    source = Column(BigInteger, ForeignKey('jira_source.id'), nullable=False)
    project_id = Column(String, nullable=False)
    project_key = Column(String, nullable=False)
    name = Column(String)

    __table_args__ = (Index('source', 'project_id', 'project_key', unique=True),)
    __tablename__ = 'jira_project'
索引
背后的思想是,项目由给定JiraSource的
id
唯一标识

正在通过删除和创建这些表

JiraBase.metadata.drop_all(bind=self.engine)
JiraBase.metadata.create_all(bind=self.engine)
这实际上可以很好地删除和创建表;但是,也会抛出一个异常

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.DuplicateTable) relation "source" already exists

[SQL: CREATE UNIQUE INDEX source ON jira_issue (issue_id)]
(Background on this error at: http://sqlalche.me/e/13/f405)
不知怎么想,因为同时使用与
源代码相关的
外键
索引
,这是一种不好的做法还是什么?当我完全注释掉索引或从中删除
source
字段时,错误就消失了。认为因为我将
source
定义为外键,所以在索引中再次使用它是不好的还是什么


知道我为什么会看到这个错误吗?目前,我只是在代码中尝试/忽略

使用Postgres 10.13、SQLAlchemy 1.3.10、psycopg2 2.8.5运行问题中的代码时,我没有遇到错误。使用Postgres 10.13、SQLAlchemy 1.3.10、psycopg2 2.8.5运行问题中的代码时,我没有遇到错误。