SQLAlchemy ForeignKey找不到表

问题描述 投票:11回答:3

当我尝试实例化ConsumerAdvice类时出现此错误。

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
python foreign-keys sqlalchemy
3个回答
12
投票

定义FK包括架构:dbo.tbConsumerAdviceCategories.ID_ConsumerAdviceCategories


6
投票

我也遇到了这个错误。在我的情况下,根本原因是我试图定义不同的sqlalchemy基类:

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

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

我有一个ForeignKey关系,从一个类来自Base1到另一个来自Base2的类。这不起作用 - 我有一个类似的NoReferencedTableError。显然,类必须从相同的Base类派生才能相互了解。

希望这有助于某人。


1
投票

这并没有解决我的问题,我不得不使用。

ConsumerAdviceCategory_ID = Column(INTEGER,
            ForeignKey('tbConsumerAdviceCategories.ID_ConsumerAdviceCategories',  
            schema='dbo'))
© www.soinside.com 2019 - 2024. All rights reserved.