2

私は、Postgres 8.3 に対して SA 0.6.6 宣言型スタイルを使用して、Python オブジェクトをデータベースにマップしています。自己参照するテーブルがあり、その子の関係プロパティを作成しようとしています。何を試しても、NoReferencedTableError になります。

私のコードは、まさにこれを行う方法について、SA Web サイトのサンプル コードとまったく同じように見えます。

これがクラスです。

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' に関連付けられた外部キーは、ターゲット列 'id' への外部キーを生成するテーブル 'FilterFolder' を見つけることができませんでした

ここで私が間違っていることはありますか?

4

2 に答える 2

2

これは私の愚かな間違いでした。通常、文字列ではなくエンティティ タイプを指定して FK を指定します。私は別のスキーマを使用しているため、FK エンティティを文字列として定義するときはスキーマも必要です。

壊れた:

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

修理済み:

parentFolderId = Column(Integer,ForeignKey('SchemaName.FilterFolder.id'))
于 2011-03-23T14:21:18.037 に答える
1

あなたのコードを SQLAlchemy 0.6.6 と sqlite でチェックしました。テーブルを作成し、親と子の組み合わせを追加して、session.query.

私が知る限り、あなたが言及した例外 ( ) は(SQLAlchemy ソースで) 排他的にNoReferencedTableErrorスローされ、データベース固有ではありません。schema.py

いくつかの質問: Postgres の代わりに sqlite URL を使用すると、同じバグが発生しますか? どのようにスキーマを作成していますか? 私のものは次のようになります。

engine = create_engine(db_url)
FilterFolder.metadata.create_all(self.dbengine)
于 2011-03-22T21:26:35.010 に答える