attributs de relation de clé étrangère sqlalchemy
J'ai une table Utilisateur et une table ami. La table ami contient deux clés étrangères à la fois à ma table utilisateur ainsi qu'un champ d'état. J'essaie de pouvoir appeler des attributs de ma table utilisateur sur un objet ami. Par exemple, j'aimerais pouvoir faire quelque chose comme, friend.name, ou ami.courriel.
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)
Quand je reçois friend
objets de tout ce que j'ai est le 2 user_ids
et je veux afficher toutes les propriétés de chaque utilisateur afin que je puisse utiliser ces informations dans les formulaires, etc. Je suis nouvelle sqlalchemy-toujours essayer d'apprendre des fonctionnalités plus avancées. Ceci est juste un extrait d'un projet Flask plus grand et cette fonctionnalité va être pour les requêtes friend
, etc. J'ai essayé de rechercher des objets d'association, etc., mais j'ai du mal avec ça.
Toute aide serait grandement appréciée.
1 réponses
Tout d'abord, si vous utilisez flask-sqlalchemy
, Pourquoi utilisez-vous directement sqlalchemy au lieu de db.Model
du flacon?
Je recommande fortement d'utiliser flask-sqlalchemy
extension car elle tire parti des sessions et d'autres choses soignées.
La création d'un objet de commodité proxy est simple. Ajoutez simplement la relation avec elle dans la classe 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 s'occupe du reste et vous pouvez accéder à l'objet utilisateur simplement par:
name = friend.user.name
Si vous prévoyez utiliser le user
objet chaque fois que vous utilisez le friend
objet de spécifier lazy='joined'
dans le relationship
. De cette façon, il charge les deux objets dans une seule requête.