【问题标题】:sqlalchemy error (sqlalchemy.exc.NoForeignKeysError)sqlalchemy 错误 (sqlalchemy.exc.NoForeignKeysError)
【发布时间】:2017-12-10 21:03:39
【问题描述】:

我正在玩一个玩具示例,以查看背面填充在操作中,但遇到了一个我无法理解的错误。下面我有两个相互填充的“模型”。当我尝试创建用户对象时,它会引发错误。我错过了什么?

“sqlalchemy.exc.NoForeignKeysError:无法确定关系 Child.user 上的父/子表之间的连接条件 - 没有链接这些表的外键。确保引用列与 ForeignKey 或 ForeignKeyConstraint 相关联,或指定一个'primaryjoin' 表达式。”

  engine = create_engine('sqlite:///:memory:', echo=False)
  Session = sessionmaker(bind=engine)
  session = Session()
  Base = declarative_base(bind=engine)

  class User(Base):
    __tablename__ = 'user'
    user_id = Column("UserID", Integer, primary_key=True)
    name = Column("Name", String(50))
    age = Column("Age", SmallInteger)
    child = relationship("Child", back_populates="user")

  class Child(Base):
    __tablename__ = 'child'
    child_id = Column("ChildID", Integer, primary_key=True)
    school = Column("School", String)
    grade = Column("Grade", String)
    user_id = Column("UserID", Integer, ForeignKey('User.UserID'), index=True, nullable=True)
    user = relationship("User", back_populates="child")

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    ForeignKey需要表和列名,而不是模型和属性名,所以应该是:

    user_id = Column("UserID", Integer, ForeignKey('user.UserID'), ...)
    

    因为您的User 模型的表名是user

    【讨论】:

    • @user3079275 比较:[capital U][lowercase u]
    • 是的,这就是我所拥有的:user_id = Column("UserID", Integer, ForeignKey('user.UserID'), nullable=True)
    • 在我的 OP 中是 user_id = Column("UserID", Integer, ForeignKey('User.UserID'), nullable=True)
    • @user3079275 我基本上已经逐字复制了您的代码并修复了它。如果它对您不起作用,那么您的问题与您发布的代码无关,或者您正在做不同的事情。
    猜你喜欢
    • 2021-07-18
    • 1970-01-01
    • 2021-08-04
    • 1970-01-01
    • 2017-10-27
    • 2015-04-08
    • 2014-11-04
    • 2015-08-08
    • 2019-01-27
    相关资源
    最近更新 更多