没有外键错误在x和y之间

2024-09-25 08:33:14 发布

您现在位置:Python中文网/ 问答频道 /正文

Base = declarative_base()


class Database:
    def __init__(self):
        engine = create_engine('mysql+pymysql://...')
        self.session = sessionmaker(bind=engine)()
        Base.metadata.create_all(engine)
        print(engine.connect().execute(
              'Select * From Customer LEFT JOIN CustomerContact On Customer.ID = CustomerContact.CustomerID')
              .fetchall())


class Customer(Base):
    __tablename__ = 'Customer'
    ID = Column(String, primary_key=True)
    Name = Column(String)
    contacts = relationship('CustomerContact')


class CustomerContact(Base):
    __tablename__ = 'CustomerContact'
    ID = Column(Integer, primary_key=True)
    CustomerID = (String, ForeignKey('Customer.ID'))
    Name = Column(String)
    Title = Column(String, default='')
    ContactInfo = Column(String, default='')
    Notes = Column(String, default='')


if __name__ == '__main__':
    db = Database()
    s = db.session
    s.query(Customer)

运行这两条线路:

session.query(Customer).all()  
session.query(Customer).join(CustomerContact).all()  

结果

sqlalchemy.exc.NoForeignKeysError: Can't find any foreign key relationships 
 between 'Customer' and 'CustomerContact'. 

而且,查询与这两个类相关的任何内容似乎都会抛出这些错误

我已经检查了拼写错误和其他线程,还运行了一个原始sql语句,看看其他地方是否有问题,但效果非常好

我在http://docs.sqlalchemy.org/en/latest/orm/basic_relationships.html#one-to-many学习这个例子 我一辈子都搞不清楚到底是怎么回事吗

如果有人能帮我指出正确的方向,进一步解决这个问题或问题所在,那将是惊人的。你知道吗


Tags: keyselfiddefaultbasestringsessioncolumn
2条回答

忘记在上调用Column()

CustomerID = (String, ForeignKey('Customer.ID'))

谢谢你Ilja Everilä!你知道吗

您应该在选择本身中引用外键。你知道吗

而不是:

session.query(Customer).join(CustomerContact).all()

尝试:

session.query(Customer).join(CustomerContact, CustomerContact.CustomerID==Customer.contacts).all()

相关问题 更多 >