2016-10-18 1 views
0

Я использую sqlacodegen для отображения кучи таблиц из моей базы данных. И я получаю следующее сообщение об ошибке:sqlalchemy.exc.AmbiguousForeignKeysError after Inheritance

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 и используйте Integer как для EmployeeID, так и для OldemployeeID. В противном случае вы получите еще одну ошибку.

class Sales(Employee): 
    __tablename__ = 'Sales' 

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

Я все еще получаю тот же« AmbiguousForeignKeysError ». возникает, когда я запускаю тот же файл, где я определил эти два класса. – MetalloyD