SQLAlchemy关系没有外键

时间:2017-03-29 09:06:38

标签: python sqlalchemy

我已经反映了现有数据库并覆盖了一些列。 有人可以告诉我以下是什么问题吗?

metadata = MetaData(engine)
class User(Base):
    __tablename__ = 'users'
    __table__ = Table('dim_user', metadata, 
                      Column('user_id', Integer, primary_key=True), 
                      autoload=True)
    projects = relationship('Project', back_populates='users')

class Project(Base):
    __tablename__ = 'projects'
    __table__ = Table('dim_project', metadata,
                      Column('project_id', Integer, primary_key=True), 
                      Column('user_id', Integer, ForeignKey('users.user_id')),
                      autoload=True)

当我尝试查询任何内容时:

NoForeignKeysError: Could not determine join condition between parent/child tables on relationship User.projects - there are no foreign keys linking these tables.  Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify a 'primaryjoin' expression.

1 个答案:

答案 0 :(得分:0)

正如@ ilja-everilä已经试图在他的评论中传达的那样,你的模型是不合理的:你明确定义了__table__属性,它覆盖了__tablename__属性 - 你必须找出< em>哪个是正确的。在ForeignKey定义中,您引用的是__tablename__ User,而不是__table__定义。

relationship的{​​{1}}定义中,您没有明确引用User.projects或加入条件,并且由于您的元数据混乱(见上文),sqlalchemy无法自动确定你想要的。