2011-09-27 8 views
11

Otrzymanie tego błędu podczas próby utworzenia instancji klasy ConsumerAdvice.SQLAlchemy ForeignKey nie może znaleźć tabeli

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

Nie wiem dlaczego, ale jeśli usuniesz 'schemat 'z' __table_args__', to działa (testowany z SQLite). Z jakiego RDBMS korzystasz? – van

+2

... spróbuj zdefiniować FK, w tym schemat: 'dbo.tbConsumerAdviceCategories.ID_ConsumerAdviceCategories' – van

+0

@van To MSSQL i dodanie schematu do definicji FK zadziałało! Wiele KUDOS .. czy możesz dodać odpowiedź, dzięki czemu mogę oznaczyć odpowiedź? – MFB

Odpowiedz

10

Zdefiniuj FK tym schemacie: dbo.tbConsumerAdviceCategories.ID_ConsumerAdviceCategories

1

To nie rozwiązuje mojego problemu, musiałem użyć.

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

Uderzyłem również ten błąd. W moim przypadku przyczyną było to, że próbowali zdefiniować różne klasy bazowe sqlalchemy:

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

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

miałem ForeignKey relację z jednej klasy, który wynika z Base1 do innej klasy, który wynika z Base2. To nie zadziałało - mam podobne NoReferencedTableError. Podobno klasy muszą pochodzić z tej samej klasy bazowej, aby wiedzieć o sobie nawzajem.

Mam nadzieję, że to komuś pomaga.

Powiązane problemy