【问题标题】:SQL Alchemy One to One (Flask)SQLAlchemy 一对一(Flask)
【发布时间】:2017-07-19 21:15:52
【问题描述】:

我想在一对一的关系表中为用户制作个人资料。我该如何为用户和用户的个人资料做这件事。

我还想展示将它们连接在一起。我如何加入配置文件和用户表以进行 CRUD 操作。

非常感谢..

class User(UserMixin, db.Model):
    __tablename__ = 'users'
    id = db.Column('user_id', db.Integer, primary_key = True)
    email = db.Column(db.String(128), unique = True)
    password = db.Column(db.String(200))
    is_admin = db.Column(db.Boolean, default=False)
    is_active = db.Column(db.Boolean, default = False)
    token = db.Column(db.String(100), unique = True)
    profile = relationship("Profile", lazy = "joined")

    def __init__(self, email, password, token, is_admin = False, is_active = False):
        self.email = email
        self.password = self.GenerateHash(password)
        self.is_active = is_active
        self.is_admin = is_admin
        self.token = token

班级简介

【问题讨论】:

    标签: python sqlalchemy


    【解决方案1】:

    您必须在 User 表中更改此行:

    profile = relationship("Profile", lazy = "joined")
    

    通过

    profile = relationship("Profile", uselist=False, back_populates="users")
    

    Profile 类中:

    class Profile(db.Model):
        __tablename__ = 'profiles'
        id = Column(Integer, primary_key=True)
        user_id = Column(Integer, ForeignKey('user.id'))
        user = relationship("User", back_populates="profiles")
    

    您可以查看文档here

    编辑:由于没有关于类 Profile 的规范,我将它的超类更改为 db.Model

    【讨论】:

    • 谢谢你的回答,back_populates在关系中是什么意思?
    • 它用于让sqlalchemy知道两个表之间的连接,你可以使用backref来避免它。 This answer 是一个很好的解释。
    猜你喜欢
    • 2022-11-05
    • 1970-01-01
    • 2016-06-15
    • 2021-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多