UserテーブルとFriendテーブルがあります。 Friendテーブルには、Userテーブルとステータスフィールドの両方に2つの外部キーがあります。 FriendオブジェクトのUserテーブルから属性を呼び出せるようにしています。たとえば、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
を使用している場合、Flaskのdb.Model
の代わりにsqlalchemyを直接使用しているのはなぜですか?
flask-sqlalchemy
拡張機能を使用することを強くお勧めします。これは、セッションやその他の便利な機能を活用するためです。
プロキシコンビニエンスオブジェクトの作成は簡単です。それとの関係を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
user
オブジェクトを使用するたびにfriend
オブジェクトを使用する場合は、relationship
でlazy='joined'
を指定します。この方法では、単一のクエリで両方のオブジェクトをロードします。