sqlalchemy.exc.NoReferencedTableError:与列X关联的外键无法找到用于生成外键的表Y

时间:2018-01-27 06:11:04

标签: python sql database postgresql sqlalchemy

我的sqlalchemy架构中出现以下错误

python manage.py db migrate
...
sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 
'ArxivPaperFigure.arxiv_id' could not find table 'papers' with which to 
generate a foreign key to target column 'arxiv_id' 

我不明白这个错误,因为表格不是新的,而是之前存在的。我做了很多改动,包括给论文表一个新表继承,但论文中的主键仍然是相同的arxiv_id。这是我的论文表

class Papers(db.Model, Paper): 

    arxiv_id = db.Column(db.String(1000), primary_key=True)
    ...

和指向该表的表是

class ArxivPaperFigure(db.Model): 
    __tablename__ = 'ArxivPaperFigure'

    id = db.Column(db.Integer, primary_key=True)
    arxiv_id = db.Column(db.String(1000), db.ForeignKey('papers.arxiv_id'))

我可以通过重写外键来解决问题

arxiv_id = db.Column(db.String(1000), db.ForeignKey(Papers.arxiv_id))

但是,我有很多外键,对于一些也有这些外键的表,这个解决方案不起作用。所以我想了解为什么会出现这个错误?论文表确实存在。如果我使用psql并使用\ d打印所有表格,我会找到该行

public | papers  | table    | user

那为什么这个引用不再起作用了?

1 个答案:

答案 0 :(得分:3)

好的我能够通过明确命名Papers表来解决它

__tablename__ = 'papers'

不确定为什么这突然之间是必要的,因为它之前都有效,但有了这个解决方案一切正常。