2011-09-27 10 views
11

Obteniendo este error cuando intento instanciar la clase ConsumerAdvice.SQLAlchemy ForeignKey no puede encontrar la tabla

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

No sé por qué, pero si elimina el 'esquema' de' __table_args__', funciona (probado con SQLite). ¿Qué RDBMS usas? – van

+2

... intente definir el FK incluyendo el esquema: 'dbo.tbConsumerAdviceCategories.ID_ConsumerAdviceCategories' – van

+0

@van ¡Es MSSQL y agrega el esquema a la definición de FK! Mucho KUDOS ... ¿puedes agregar la respuesta para que pueda marcarla? – MFB

Respuesta

10

Definir el esquema incluido FK: dbo.tbConsumerAdviceCategories.ID_ConsumerAdviceCategories

1

Eso no resuelve mi problema, tuve que usar.

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

También he encontrado este error. En mi caso la causa fue que yo intentado definir diferentes clases base sqlalchemy:

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

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

que tenían una relación ForeignKey de una clase que deriva de Base1 a otra clase que deriva de Base2. Esto no funcionó - Obtuve un NoReferencedTableError similar. Aparentemente, las clases deben derivar de la misma clase Base para conocerse entre sí.

Espero que esto ayude a alguien.

Cuestiones relacionadas