繁体   English   中英

如何在Flask-SQL Alchemy中进行多对多查询?

[英]How to do a many to many query in Flask-SQL Alchemy?

我正在使用Flask和SQL-Alchemy为我的Android应用程序创建API。 我有一个MySQL数据库,其表设置如下:

symptoms:
|    _id     |    symptom     |

food_categories:
|    _id     |    food_categories   |

food_recommendation_type:
|    _id     |    food_categories   |

symptom_food_relationship: (This table is association table relating all three)
|     id     |       symptom_id     |   food_category_id  | food_recommendation_type_id  |

在我的Flask应用程序中,我已映射出每个表:

symptom_food_relationship_table = db.Table('symptom_food_relationship',
                       db.Column('id', db.Integer),
                       db.Column('symptom_id', db.Integer, ForeignKey('symptoms._id')),
                       db.Column('food_category_id', db.Integer, ForeignKey('food_categories._id')),
                       db.Column('food_recommendation_type_id', db.Integer, ForeignKey('food_recommendation_type._id')))

class Symptom(db.Model):
__tablename__ = 'symptoms'
_id = db.Column(db.Integer, primary_key=True)
symptom = db.Column(db.String(100))
symptom_food_relationship = relationship("Food_Categories",
                                         secondary=symptom_food_relationship_table)

class Food_Categories(db.Model):
__tablename__ = 'food_categories'
_id = db.Column(db.Integer, primary_key=True)
food_categories = db.Column(db.String(30))

class Food_Recommendation_Type(db.Model):
__tablename__ = 'food_recommendation_type'
_id = db.Column(db.Integer, primary_key=True)
food_recommendation_type = db.Column(db.String)

该表如下所示:

id symptom_id food_categoryid food_recommendation_id
1   1          2                    1
11  1          8                1
21  1          0                3
31  1          3                3

我的问题是将这些值更改为其名称的查询。 要查询一张表,我会说结果= Symptom.query.all()。 我知道执行此操作的SQL语句是...

SELECT s.symptom, fc.food_categories, fr.food_recommendation_type
FROM symptoms AS s 
INNER JOIN symptom_food_relationship AS srt
INNER JOIN food_categories AS fc
INNER JOIN food_recommendation_type AS fr
ON s._id = srt.symptom_id
AND fc._id = srt.food_category_id
AND fr._id = srt.food_recommendation_type_id
WHERE s._id='1'
ORDER BY s.symptom, food_categories

什么是等效的SQL炼金术查询语句。 因此,我可以在JSON响应中构建它。

您想提出这样的事情:

results = (session.query(Symptom)
              .join(Symptom. symptom_food_relationship)
              .values(Symptom.symptom,
                      Food_Categories. food_categories,
                      Food_Recommendation_Type.food_recommendation_type))

结果以某种方式收集:

resultlist = []
for username, message, time in results:
    resultlist.append({'symptom': symptom,
                       'food_categories': food_categories,
                       'food_recommendation_type': food_recommendation_type})

可能会有更优雅的方法来处理您的数据结构,但是这种方法应该可行。

最好的方法是阅读有关此问题的文档: http : //docs.sqlalchemy.org/en/rel_0_9/orm/query.html#sqlalchemy.orm.query.Query.join

祝好运 :)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM