SQLAlchemy를 사용하는 모델로 이러한 클래스가 있습니다. 성공적으로 marshmallow를 사용하여 내 사용자 객체를 인코딩했지만 중첩 링크 객체는 인코딩하지 않습니다. 내 SQLAlchemy 쿼리가 올바르게 작동하는 fk의 링크 테이블 조인을 수행하고 있습니다. 내 NestedSchema가 잘못된 점을 알아내는 데 문제가 있으며 왜 인코딩하지 않을까요?Marshmallow에서 중첩 스키마 인쇄
class User(Base):
__tablename__ = 'user'
id = Column('id', Integer, primary_key=True)
username = Column('username', String(255), unique=True)
link = relationship("Link", backref='user', lazy='joined')
class Link(Base):
__tablename__ = 'link'
id = Column('id', Integer, primary_key=True)
name = Column('name', String(255))
user_id = Column('user_id', Integer, ForeignKey("user.id"), nullable=True)
class LinkSchema(Schema):
name = fields.Str()
user = fields.Nested('UserSchema')
class UserSchema(Schema):
username = fields.Str()
links = fields.Nested('LinkSchema')
나는 이와 같이 보이는 데이터베이스를 쿼리하는 기능이 있습니다. 이렇게하면 사용자와 링크가 올바르게 반환됩니다.
def get_user(user_id):
session = get_session()
try:
user = session.query(User).filter(User.id == user_id)
except exc.SQLAlchemyError:
return False
return user
내 플라스크 경로에는 이것이 실행 중입니다. 제대로 사용자 정보를 얻을 수 있지만 마쉬멜로 우는 링크 부분을 인코딩하지 않습니다. 프린팅 링크 때문에 거기있는 걸 압니다. 이름 [0]. 나는 문서를 여러 번 검토해 보았고 무엇이 잘못되었는지 알 수 없었습니다. 모든 팁은 크게 감사하겠습니다.
@app.route('/api/user_info/)
def get_user_info():
user = get_user(user_id)
for u in user:
print (u.link[0].name) #this prints the link name so I know its there
schema = UserSchema(strict=True, many=True)
result = schema.dumps(user)
pprint(result.data, indent=2)
return result.data
반환되는 json입니다. 링크가 없습니다! 이유를 알아낼 수 없습니다. 나는 간결함을 위해서 많은 칼럼을 생략했다.
[{"username": "erick", "role": 1}]