car*_*arl 2 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'
Run Code Online (Sandbox Code Playgroud)
我不明白这个错误,因为表格文件不是新的,而是以前存在的。我做了很多改变,包括给论文表一个新的表来继承,但论文中的主键仍然是相同的 arxiv_id。这是我的论文表
class Papers(db.Model, Paper):
arxiv_id = db.Column(db.String(1000), primary_key=True)
...
Run Code Online (Sandbox Code Playgroud)
指向这个表的表是
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'))
Run Code Online (Sandbox Code Playgroud)
我可以通过重写外键来解决这个问题
arxiv_id = db.Column(db.String(1000), db.ForeignKey(Papers.arxiv_id))
Run Code Online (Sandbox Code Playgroud)
但是,我有很多外键,对于一些也有这些外键的表,这个解决方案不起作用。所以我想了解为什么会出现这个错误?文件表确实存在。如果我使用 psql 并用 \d 打印所有表,我会找到该行
public | papers | table | user
Run Code Online (Sandbox Code Playgroud)
那么为什么这个参考不再起作用了?
car*_*arl 10
好的,我能够通过显式命名 Papers 表来解决它
__tablename__ = 'papers'
Run Code Online (Sandbox Code Playgroud)
不知道为什么这突然是必要的,因为它以前都有效,但是有了这个修复,一切正常。
为了供其他人参考,如果您使用架构(例如 Postgres),您可能还必须指定它:
# Assumes tables live in schema `my_schema`
arxiv_id = db.Column(db.String(1000), db.ForeignKey('my_schema.papers.arxiv_id'))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5673 次 |
| 最近记录: |