2011-09-27 2 views
11

ConsumerAdviceクラスをインスタンス化しようとするとこのエラーが発生します。SQLAlchemy ForeignKeyがテーブルを見つけることができません

Foreign key associated with column 'tbConsumerAdvice.ConsumerAdviceCategory_ID' 
could not find table 'tbConsumerAdviceCategories' with which to generate a 
foreign key to target column 'ID_ConsumerAdviceCategories' 
class ConsumerAdviceCategory(Base): 
    __tablename__ = 'tbConsumerAdviceCategories' 
    __table_args__ = {'schema':'dbo'} 
    ID_ConsumerAdviceCategories = Column(INTEGER, Sequence('idcac'),\ 
      primary_key=True) 
    Name = Column(VARCHAR(50), nullable=False) 

    def __init__(self,Name): 
     self.Name = Name 

    def __repr__(self): 
     return "< ConsumerAdviceCategory ('%s') >" % self.Name 

class ConsumerAdvice(Base): 
    __tablename__ = 'tbConsumerAdvice' 
    __table_args__ = {'schema':'dbo'} 
    ID_ConsumerAdvice = Column(INTEGER, Sequence('idconsumeradvice'),\ 
      primary_key=True) 
    ConsumerAdviceCategory_ID = Column(INTEGER,\ 
      ForeignKey('tbConsumerAdviceCategories.ID_ConsumerAdviceCategories')) 
    Name = Column(VARCHAR(50), nullable=False) 
    Category_SubID = Column(INTEGER) 

    ConsumerAdviceCategory = relationship("ConsumerAdviceCategory",\ 
      backref=backref('ConsumerAdvices')) 

    def __init__(self,Name): 
     self.Name = Name 

    def __repr__(self): 
     return "< ConsumerAdvice ('%s') >" % self.Name 
+1

理由はわかりませんが、 '__table_args__'から' schema'を削除しても動作します(SQLiteでテスト済み)。どのRDBMSを使用していますか? – van

+2

...スキーマを含むFKを定義しようとしています: 'dbo.tbConsumerAdviceCategories.ID_ConsumerAdviceCategories' – van

+0

@vanそれはMSSQLであり、FK定義にスキーマを追加すると機能しました!たくさんのKUDOS ..あなたは答えを追加できるので、答えをマークすることができますか? – MFB

答えて

10

スキーマを含むFKを定義します。私の問題は解決しませんでしたdbo.tbConsumerAdviceCategories.ID_ConsumerAdviceCategories

1

を、私が使用する必要がありました。

ConsumerAdviceCategory_ID = Column(INTEGER, 
      ForeignKey('tbConsumerAdviceCategories.ID_ConsumerAdviceCategories', 
      schema='dbo')) 
4

このエラーも発生しました。

Base1 = declarative_base(cls=MyBase1) 
Base1.query = db_session.query_property() 

Base2 = declarative_base(cls=MyBase2) 
Base2.query = db_session.query_property() 

私はBase2から派生した別のクラスにBase1から派生一つのクラスからForeignKey関係を持っていた:私の場合、根本的な原因は、私は別のSQLAlchemyの基本クラスを定義しようとしたことでした。これはうまくいかなかった - 私は似たようなものを持っていたNoReferencedTableError。相互に知るために、クラスは同じBaseクラスから派生している必要があります。

これは誰かを助けることを望みます。