繁体   English   中英

SQLAlchemy自引用关系-NoReferencedTableError

[英]SQLAlchemy Self Referencing Relationship - NoReferencedTableError

我使用针对Postgres 8.3的声明性样式SA 0.6.6将Python对象映射到数据库。 我有一个自引用的表,我正在尝试为其子项设置一个关系属性。 无论我尝试什么,最终都会遇到NoReferencedTableError。

我的代码看起来完全像SA网站上示例代码,说明了如何执行此操作

这是课程。

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”的外键

有任何想法我在这里做错了吗?

就我而言,这是一个愚蠢的错误。 我通常通过指定实体类型而不是字符串来指定我的FK。 我使用的是不同的架构,因此在将FK实体定义为字符串时,我也需要该架构。

破碎:

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

固定:

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

我用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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM