gpt4 book ai didi

python - sqlalchemy 外键关系属性

转载 作者:IT老高 更新时间:2023-10-28 22:00:36 29 4
gpt4 key购买 nike

我有一个用户表和一个 friend 表。 Friend 表包含我的 User 表和状态字段的两个外键。我试图能够从我的 User 表中调用 Friend 对象的属性。例如,我希望能够做类似friend.name 或friend.email 之类的操作。

class User(Base):
""" Holds user info """

__tablename__ = 'user'
id = Column(Integer, primary_key=True)
name = Column(String(25), unique=True)
email = Column(String(50), unique=True)
password = Column(String(25))
admin = Column(Boolean)

# relationships
friends = relationship('Friend', backref='Friend.friend_id',primaryjoin='User.id==Friend.user_id', lazy='dynamic')

class Friend(Base):
__tablename__ = 'friend'

user_id = Column(Integer, ForeignKey(User.id), primary_key=True)
friend_id = Column(Integer, ForeignKey(User.id), primary_key=True)
request_status = Column(Boolean)

当我得到 friend 对象时,我只有 2 个 user_ids 并且我想显示每个用户的所有属性,以便我可以在表单等中使用该信息。我是 sqlalchemy 的新手 - 仍在尝试学习更高级的功能。这只是一个更大的 Flask 项目的一个片段,这个功能将用于 friend 请求等。我试图查找关联对象等,但我很难用它.

任何帮助将不胜感激。

最佳答案

首先,如果你使用的是flask-sqlalchemy,你为什么直接使用sqlalchemy而不是Flask的db.Model

我强烈建议使用 flask-sqlalchemy扩展,因为它利用了 session 和其他一些简洁的东西。

创建代理便利对象很简单。只需在 Friend 类中添加与它的关系即可。

class Friend(Base):
__tablename__ = 'friend'

user_id = Column(Integer, ForeignKey(User.id), primary_key=True)
friend_id = Column(Integer, ForeignKey(User.id), primary_key=True)
request_status = Column(Boolean)

user = relationship('User', foreign_keys='Friend.user_id')
friend = relationship('User', foreign_keys='Friend.friend_id')

SQLAlchemy 会处理剩下的事情,您可以通过以下方式访问用户对象:

name = friend.user.name

如果您计划每次使用 friend 对象时都使用 user 对象,请在 中指定 lazy='joined'关系。这样,它会在一个查询中加载这两个对象。

关于python - sqlalchemy 外键关系属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18807322/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com