まず、__repr__はビューではないため、User列が定義された単純なモデルがあり、をクエリすると、Userで使用されている列だけでなく、すべての列がデータベースから読み込まれます__repr__。
モデルBook(後で参照する例から)を基礎として取り上げましょう。
class Book(Base):
book_id = Column(Integer, primary_key=True)
title = Column(String(200), nullable=False)
summary = Column(String(2000))
excerpt = Column(Text)
photo = Column(Binary)
一部の列の読み込みをスキップする最初のオプションは、遅延列の読み込みを使用することです。
class Book(Base):
# ...
excerpt = deferred(Column(Text))
photo = deferred(Column(Binary))
この場合、クエリを実行するsession.query(Book).get(1)と、コードからアクセスされるまで列photoとexcerpt列が読み込まれません。その時点で、データベースに対する別のクエリが実行され、不足しているデータが読み込まれます。
ただし、クエリを実行する前に、すぐにBook列が必要であることがわかっている場合photoでも、undeferオプションを使用して遅延動作をオーバーライドできますquery = session.query(Book).options(undefer('photo')).get(1)。
基本的に、ここでの提案は、すべての列(あなたの場合:ユーザー名、パスワードなどを除く)を延期undeferし、各ユースケース(ビュー)で、その特定のビューに必要であることがわかっている列でオーバーライドすることです。ユースケース(ビュー)ごとに属性をグループ化できるようgroupに、のパラメーターも参照してください。deferred
別の方法は、一部の列のみをクエリすることですが、この場合tuple、モデルインスタンスの代わりにインスタンスを取得しているUserため(この場合)、フォームの入力には問題がない可能性がありますが、モデルの検証にはあまり適していません。session.query(Book.id, Book.title).all()