2011-09-27 9 views
11

Ottenere questo errore quando provo a creare un'istanza della classe ConsumerAdvice.SQLAlchemy ForeignKey non riesce a trovare la tabella

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

Non so perché, ma se rimuovi lo 'schema' da' __table_args__', funziona (testato con SQLite). Quale RDBMS usi? – van

+2

... prova a definire l'FK incluso lo schema: 'dbo.tbConsumerAdviceCategories.ID_ConsumerAdviceCategories' – van

+0

@van È MSSQL e l'aggiunta dello schema alla definizione FK ha funzionato! Molto KUDOS .. puoi aggiungere la risposta in modo da poter contrassegnare la risposta? – MFB

risposta

10

Definire l'FK tra cui schema: dbo.tbConsumerAdviceCategories.ID_ConsumerAdviceCategories

1

che non ha risolto il mio problema, ho dovuto usare.

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

Ho anche ricevuto questo errore. Nel mio caso la causa principale è che ho tentato di definire diverse classi base sqlalchemy:

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

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

ho avuto un rapporto ForeignKey da una classe che deriva da Base1 ad un'altra classe che deriva da Base2. Questo non ha funzionato - ho ottenuto un simile NoReferencedTableError. Apparentemente le classi devono derivare dalla stessa classe Base per conoscersi l'un l'altro.

Spero che questo aiuti qualcuno.

Problemi correlati