sqlalchemy一对一关系实例

sqlalchemy一对一关系实例,sqlalchemy,flask-sqlalchemy,Sqlalchemy,Flask Sqlalchemy,我是炼金术的新手。我读了很多指南,但没有复制出来。 我需要建立1对1的关系,但我失败了(每个用户都有一个相关的元表来区分数据和信息)。 这是我当前的坏代码 class UserData(Base): __tablename__ = "users" user_id = Column(Integer, primary_key=True, index=True) age = Column(Integer, index=True) first_nam

我是炼金术的新手。我读了很多指南,但没有复制出来。 我需要建立1对1的关系,但我失败了(每个用户都有一个相关的元表来区分数据和信息)。 这是我当前的坏代码

class UserData(Base):
    __tablename__ = "users"

    user_id = Column(Integer, primary_key=True, index=True)
    age = Column(Integer, index=True)
    first_name = Column(String, index=True)
    last_name = Column(String, index=True)
    country = Column(String, index=True)
    city = Column(String, index=True)
    comment = Column(String, index=True)
    users_meta = relationship("UserMeta", uselist=False, back_populates="users")


class UserMeta(Base):
    __tablename__ = "users_meta"

    email = Column(String, unique=True, index=True)
    hashed_password = Column(String)
    is_active = Column(Boolean, default=True)
    user_id = Column(Integer, ForeignKey('users.user_id'))
    users = relationship("UserData", back_populates="users")

代码几乎是正确的,它需要两个更改:

  • UserMeta
    需要主键列

     id = Column(Integer,primary_key=True)
    
  • UserMeta
    中的关系定义应参考
    UserData
    users\u meta
    属性,而不是不存在的
    users

     users = relationship("UserData", back_populates="users_meta")
    

  • 一个小点-在
    UserData.id
    中不需要
    index=True
    ,主键将被自动索引。

    谢谢。你能再回答我几个问题吗?1.为什么需要关系,在标准SQL中只有外键?2.在此代码中,FK和关系必须使用什么名称?因为我不知道第一个问题的答案,我不知道用什么名字。我目前只使用表的父/子/方法的名称。例如:
    classuserdata(Base):\uu tablename\uu=“users\u data”。。。users\u meta=relationship(“UserMeta”,uselist=False,back\u populates=“users\u data”)类UserMeta(Base):\uuuu tablename\uuuu=“users\u meta”。。。user\u data\u id=列(整数,ForeignKey('users\u data.user\u id'))users\u data=关系(“UserData”,back\u populates=“users\u meta”)
    关系提供了FK可以描述的更多信息-例如,关系可以描述多对多关系,这可能无法仅从FK中推断。它们还可以描述其他Python级别的配置,例如用于多方的集合类型,或者FK是否与其父级或更高版本一起加载。你可以给他们起任何你喜欢的名字。父母/孩子很好。