2011-09-27 75 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

我也遇到了這個錯誤。在我的情況的根本原因是,我試圖確定不同SQLAlchemy的基類:

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

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

我從從Base1派生於從Base2派生另一個類一類一ForeignKey關係。這不起作用 - 我得到了類似的NoReferencedTableError。顯然類必須從相同的基類中派生出來才能相互瞭解。

希望這可以幫助別人。