2017-07-10 14 views
0

私は一対多の関係を設定しようとしている2つのテーブルを持っています。 Sessionsが複数ある単一のPlayerが必要です。私はSQLAlchemyの関係の問題 - マッパーが名前の検索に失敗する

として Playerの外のダウン relationship行を削除し、 PlayerSessionの順序を切り替えてみた

sqlalchemy.exc.InvalidRequestError: One or more mappers failed to initialize - 
can't proceed with initialization of other mappers. Triggering mapper: 
'Mapper|Player|player'. Original exception was: When initializing mapper 
Mapper|Player|player, expression 'Session' failed to locate a name ("name 
'Session' is not defined"). If this is a class name, consider adding this 
relationship() to the <class 'analysis_db_tables.Player'> class after both 
dependent classes have been defined. 

import sqlalchemy as sql 
from sqlalchemy.orm import relationship 
from sqlalchemy.ext.declarative import declarative_base 

Base = declarative_base() 

class Session(Base): 
    __tablename__ = 'session' 

    id = sql.Column('session_id', sql.INTEGER, primary_key=True) 
    player_id = sql.Column(sql.INTEGER, sql.ForeignKey('player.player_id')) 

class Player(Base): 
    __tablename__ = 'player' 

    id = sql.Column('player_id', sql.INTEGER, primary_key=True) 
    sessions = relationship('Session', backref='player') 

しかし、私は、データベースを作成する際に取得しておくエラーがあります

Player.sessions = relationship('Session', backref='player') 

と、back_populatesrelationshipの両方を使用してみましたクラス。私はここで間違って何をしていますか?

この問題はデータベースコードの作成中に一見無作為にポップアップしていましたが、問題を再現しながらテーブルをこの2つにペアにしました。私はpostgresでSQLAlchemyを使用しています。ありがとう。

答えて

0

試してみてください。

sessions = sql.relationship('Session', backref='player') 

の代わりに: `sqlalchemy.exc.NoReferencedColumnError:ForeignKeyの 'player.id' のターゲット列を初期化できませんでした

sessions = relationship('Session', backref='player') 
+0

メイキングだけ変更するには、次のエラーがスローされます'session'テーブル: 'player'テーブルに 'id'という名前のカラムがありません – ketone

+0

あなたのカラムに "product_id"という名前が含まれています。私は別の可能な問題に私の答えを変更しました。 – mul

+0

ありがとうございます。でも、そうではありません。私は 'from sqlalchemy.orm import relationship'から直接関係を取得しています – ketone

関連する問題