私はPythonを学習しており、フレームワークのピラミッドを使用して、sqlalchemyをormとして使用しています。関係がどのように機能するかわかりません。2 つのテーブル、オフィス、ユーザーがあります。外部キーは users テーブル 'offices_id' にあります。ユーザーが所属しているオフィスを返すクエリを実行しようとしています。
これが私のモデルのセットアップ方法です。
DBSession = scoped_session(sessionmaker(extension=ZopeTransactionExtension()))
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(Unicode(255), unique=True, nullable=False)
trec_number = Column(Unicode(255), unique=True, nullable=False)
office_id = Column(Integer, ForeignKey('offices.id'))
class Office(Base):
__tablename__ = 'offices'
id = Column(Integer, primary_key=True)
name = Column(Unicode(255), unique=True, nullable=False)
address = Column(Unicode(255), unique=True, nullable=False)
members = relationship("User", backref='offices')
私の考えでは、特定のユーザーのオフィス情報を返すクエリをどのように作成すればよいでしょうか?
私はこれを試しています:
for user in DBSession.query(User).join(Office).all():
print user.address
しかし、エラーが発生し続けるため、クエリの仕組みを誤解していると思います
AttributeError: 'User' object has no attribute 'address'
私がこれを行うとき:
for user in DBSession.query(User).join(Office).all():
print user.name
name は User クラスの属性であるため、ユーザー名を適切に出力します。
また、逆を機能させることもできません
for offices in DBSession.query(Office).join(User).all():
print offices.users.name