Python x和y之间无ForeignKeys错误

Python x和y之间无ForeignKeys错误,python,sqlalchemy,Python,Sqlalchemy,运行这两条线路: 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.connec

运行这两条线路:

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()  
此外,查询与这两个类相关的任何内容似乎都会抛出这些错误

我已经检查了打字错误和其他线程,并运行了一个原始sql语句,看看其他地方是否有问题,但它工作得非常好

我当时正在学习这个例子 难道我一辈子都不知道到底是什么错了吗


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

您应该在选择中引用外键

而不是:

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

忘记在上调用Column()


谢谢你Ilja Everilä

SQLAlchemy应该能够自动使用现有的外键关系,因此这里还有其他问题。此外,
CustomerContact.CustomerID==Customer.contacts
生成了一个相当时髦的ON子句:
ON“CustomerContact”。“CustomerID=”(“Customer”。“ID”=“CustomerContact”。“CustomerID”)
,可能是因为
Customer.contacts
是如何被改编的。您做了一个简单的输入:
CustomerID=(字符串,ForeignKey('Customer.ID'))
将一个2元组指定为
CustomerID
。你想创建一个
专栏
。哦,天哪,我真不敢相信我错过了!谢谢你的帮助!
session.query(Customer).join(CustomerContact).all()
session.query(Customer).join(CustomerContact, CustomerContact.CustomerID==Customer.contacts).all()
CustomerID = (String, ForeignKey('Customer.ID'))