Python SqlAlchemy删除/创建所有重复关系
使用SQL Alchemy和声明性base定义两个相关表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
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运行问题中的代码时,我没有遇到错误。