2016-10-18 14 views
0

私はデータベースからテーブルの束を反映するためにsqlacodegenを使用しています。 と私は次のエラーを取得しています:継承後のsqlalchemy.exc.AmbiguousForeignKeysError

sqlalchemy.exc.AmbiguousForeignKeysError: Can't determine join between 'Employee' and 'Sales'; tables have more than one foreign key constraint relationship between them. Please specify the 'onclause' of this join explicitly.

ここに私のテーブルの簡易版です。 ドキュメントでは、外部キーターゲット間のあいまいさを解決するために、foreign_keysパラメータを使用する必要があります。しかし、私はこの問題は継承のためだと思う。誰かが私に何が起こっているのか理解してもらえるか?

# coding: utf-8 
from sqlalchemy import Column, ForeignKey, Integer 
from sqlalchemy.ext.declarative import declarative_base 
from sqlalchemy.orm import relationship 

Base = declarative_base() 


class Employee(Base): 
    __tablename__ = 'Employee' 

    EmployeeId = Column(Integer, primary_key=True) 


class Sales(Employee): 
    __tablename__ = 'Sales' 

    EmployeeID = Column(ForeignKey('Employee.EmployeeId'), primary_key=True) 
    OldemployeeID = Column(ForeignKey('Employee.EmployeeId')) 
    employee = relationship('Employee', foreign_keys=[EmployeeID]) 
    old_employee = relationship("Employee", foreign_keys=[OldemployeeID]) 
+0

カラム(Foreign ...、しかしColumn(Integer、Foreign ....)だけでなく、タイプが指定されていることを確認してください。 – ApolloFortyNine

+0

どのような継承をしたいのですか?継承のクラスを設定していないようです – univerio

+0

私は実際に継承を自分ではしませんでした。データベースに 'sqlacodegen'を実行するとテーブルが生成されます – MetalloyD

答えて

1

backrefを使用して、EmployeeIDとOldemployeeIDの両方でIntegerを使用してください。そうしないと、別のエラーが発生します。

+0

私はまだ' AmbiguousForeignKeysError'を取得しています。これらの2つのクラスを定義した同じファイルを実行すると発生します。 – MetalloyD