SQLAlchemy 自引用关系 - NoReferencedTableE

2024-10-01 11:39:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用sa0.6.6,声明式风格,针对postgres8.3,将Python对象映射到数据库。我有一个自引用的表,我试图为它的子级创建一个关系属性。不管我怎么做,最后都会出现一个noreferenceddableerror。在

我的代码看起来与sample code from the SA website for how to do this very thing完全相同。在

这是课堂。在

class FilterFolder(Base):
    __tablename__ = 'FilterFolder'
    id = Column(Integer,primary_key=True)
    name = Column(String)
    isShared = Column(Boolean,default=False)
    isGlobal = Column(Boolean,default=False)
    parentFolderId = Column(Integer,ForeignKey('FilterFolder.id'))
    childFolders = relationship("FilterFolder",
                    backref=backref('parentFolder', remote_side=id)
                    )

我得到的错误是:

NoReferencedTableError:与列“”关联的外键FilterFolder.parentFolderId'找不到表“FilterFolder”,用它生成目标列“id”的外键

你知道我做错了什么吗?在


Tags: 对象id数据库falsedefault声明风格column
2条回答

这对我来说是个愚蠢的错误。我通常通过指定实体类型而不是字符串来指定FK。我使用不同的模式,所以当将FK实体定义为字符串时,我也需要模式。在

破损:

parentFolderId = Column(Integer,ForeignKey('FilterFolder.id'))

固定的:

^{pr2}$

我用SQLAlchemy 0.6.6和sqlite检查了您的代码。我能够创建表,添加父级和子级组合,并使用session.query再次检索它们。在

据我所知,您提到的异常(NoReferencedTableError)是专门在schema.py(在SQLAlchemy源代码中)抛出的,并且不是特定于数据库的。在

一些问题:如果使用sqlite URL而不是Postgres URL,您是否看到相同的错误?如何创建模式?我的看起来像这样:

engine = create_engine(db_url)
FilterFolder.metadata.create_all(self.dbengine)

相关问题 更多 >