首页 > 解决方案 > sqlalchemy 一对一关系实例

问题描述

我是 sqlalchemy 的新手。我阅读了很多指南,但未能重现。我需要建立一对一的关系,但我失败了(每个用户都有一个相关的元表来区分数据和信息)。这是我当前损坏的代码。

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")

标签: sqlalchemyflask-sqlalchemy

解决方案


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

  1. UserMeta需要一个主键列

     id = Column(Integer,primary_key=True)
    
  2. 中的关系定义UserMeta应该引用不存在UserDatausers_meta属性,而不是。users

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

一个小问题 - 不需要index=Truein UserData.id,主键将被自动索引。


推荐阅读