如何从关系表中查询数据并以json格式显示它们[重复]
Posted
技术标签:
【中文标题】如何从关系表中查询数据并以json格式显示它们[重复]【英文标题】:How to query data from relations tables and show them in json format [duplicate] 【发布时间】:2022-01-07 04:36:24 【问题描述】:我有教练的数据类和用户的数据类。如何用json格式里面的用户列表查询所有coach结果。 所以例如我想实现这个:""coach_id":1,"coach_login":"Alan","subscribers":[ "user_id":1,"user_login":"John"]"
@dataclass
class User(db.Model):
__tablename__='user'
user_id: int
login: str
user_id = db.Column(db.BigInteger, primary_key=True)
login = db.Column(db.String(255))
password_hash = db.Column(db.String(255))
subscriptions = db.relationship('Coach', secondary=subs, backref='subscribers')
@property
def password(self):
raise AttributeError('Password is not in valid format')
@password.setter
def password(self,password):
self.password_hash = generate_password_hash(password)
def varify_password(self, password):
return check_password_hash(self.password_hash,password)
@dataclass
class Coach(db.Model):
__tablename__='coach'
coach_id: int
login: str
coach_id = db.Column(db.BigInteger, primary_key=True)
login = db.Column(db.String(255))
password_hash = db.Column(db.String(255))
@property
def password(self):
raise AttributeError('Password is not in valid format')
@password.setter
def password(self,password):
self.password_hash = generate_password_hash(password)
def varify_password(self, password):
return check_password_hash(self.password_hash,password)
【问题讨论】:
【参考方案1】:借助 dataclass 装饰器,您可以使用 SqlAlchemy 获取数据,然后将其解析为 JSON:
# Endpoint to get a list of all users
@app.route("/api/users/", methods=['GET'])
def users():
users = User.query.all()
return jsonify(users)
【讨论】:
是的,我知道并且我现在正在使用它,但我想要实现的是:我创建了 2 个数据模型(用户和教练)。这是多对多的关系。现在我尝试显示教练数据,这些数据将包含分配给该教练的用户列表。当我查询 Coach.query.all() 时,它只会显示教练数据(例如 id、登录名),但不会显示分配给该教练的用户列表。如何查询数据来实现呢? (json格式结果)【参考方案2】:您可以使用棉花糖 (https://marshmallow.readthedocs.io/)
烧瓶棉花糖:https://flask-marshmallow.readthedocs.io/en/latest/
marshmallow 是一个与 ORM/ODM/框架无关的库,用于转换 与本机 Python 之间的复杂数据类型,例如对象 数据类型。
您可以像 SQLAlchemy 一样初始化 Marshmallow(您可以在文档中找到很好的示例)
然后您可以使用 ma.SQLAlchemyAutoSchema 为您的表创建架构(对于关系:https://marshmallow.readthedocs.io/en/stable/nesting.html)
class UserSchema(ma.SQLAlchemyAutoSchema):
class Meta:
model= User
sqla_session = db.session
然后你可以在 UserSchema 中加载一个 User 并转储它
user = User.query.first()
user_schema = UserSchema()
user_schema.dump(user)
【讨论】:
我也用过棉花糖。但是我仍然没有收到我想要的结果。我有 2 个数据模型(用户和教练)。这是多对多的关系。现在我尝试显示教练数据,这些数据将包含分配给该教练的用户列表。当我使用棉花糖模式并转储结果时,它只会显示教练数据(例如 id、登录名),但不会显示分配给该教练的用户列表。如何查询数据来实现呢? (json格式结果)以上是关于如何从关系表中查询数据并以json格式显示它们[重复]的主要内容,如果未能解决你的问题,请参考以下文章
从数据库中检索数据并在 json laravel 4 中打印它们
MySQL/PHP 输出数组重复查询然后显示结果,如何删除查询? [复制]
如何通过 query() 获取 wordpress 帖子并以 json 格式输出?