python - SQLAlchemy子查询,它们适用于这种情况吗

标签 python mysql flask sqlalchemy

我已经阅读了很多有关 SQLAlchemy 子查询的内容,并且我认为它以某种方式适用于我的问题。

我有以下两个疑问

Query 1=>isp_ratings_per_service = db.session.query(func.count(Ratings.ratings_value).label('count_of_users'),
                                               func.sum(Ratings.ratings_value).label('sum_of_ratings'),
                                               func.avg(Ratings.ratings_value).label('avg_of_ratings'),
                                               Isps.isp_name, Service_metric.metric_name, Services.service_name) \
        .filter(Service_metric_ratings.isp_id == Isps.isp_id) \
        .filter(Service_metric_ratings.ratings_value == Ratings.ratings_value) \
        .filter(Service_metric_ratings.metric_id == Service_metric.metric_id) \
        .filter(Service_metric_ratings.user_id == User.user_id) \
        .filter(Service_metric_ratings.service_id == Services.service_id) \
        .filter(Service_metric.metric_name == metric_name) \
        .filter(Services.service_name == service_name) \
        .group_by(Isps.isp_name)

Query 2 => ratings_table_values = db.session.query(Ratings.rating_value, Ratings.rating_comment) 

我想使用此行中存储的值

func.avg(Service_metric_ratings.ratings_id).label('avg_of_ratings'),

根据此值选择另一个表中的数据,如下所示

for i in isp_ratings_per_service:
    (round(i.avg_of_ratings)))
    ratings_table_values = Ratings.query.filter_by(rating_value=(round(i.avg_of_ratings)))

是否可以使用子查询将它们放入一个查询中,目前的问题是它在 flask 模板中创建了 2 次迭代,这没有给我想要的结果,如下所示

 {% for i in ratings_table_values %}
 <tr>
  <td>{{ i.rating_value}}</td>
  <td>{{ i.rating_comment}}</td>
 {% endfor %}

{% for i in isp_ratings_per_service %}
blah blah blah
{% endfor %}

我希望一个查询能够给出我想要的结果,

最佳答案

我设法像这样解决我自己的问题,查询是分开的,不需要连接并且它工作完美。我在 Jinja 中发展了我的逻辑

{% for i in isp_ratings_per_service %}
  <td>{{ i.isp_name }}</td>
  <td>{{ i.metric_name }}</td>
  <td>{{ i.service_name }}</td>
  <td>{{ i.count_of_users }}</td>
  <td>{{ i.sum_of_ratings }}</td>
  <td>{{ i.avg_of_ratings|round|int }}</td>
         {% for m in ratings_table_values %}
            {% if (m.ratings_value) ==(i.avg_of_ratings|round|int)%}
                 <td>{{ m.ratings_comment}}</td>
            {% endif %}
         {% endfor %}
  </tr>
  {% else %}
  <tr><td colspan="7"><em>No entries here so far</em></td></tr>
  {% endfor %}

关于python - SQLAlchemy子查询,它们适用于这种情况吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37255130/

相关文章:

python - 如何从 RSA key 对创建 JWK?

python - 为什么三元条件不能完美地用于字符串连接

php - 单击时,切换图像以及 MySQL 数据库中的值

python - 在GAE上包含Jinja2和Flask而不是使用GAE版本有什么优势?

python - 如何将字符串中的特殊字符转换回转义序列?

php - 当 WHERE 不匹配时,在 COUNT 列中显示 "0"?

php - 使用 php 将 csv 上传到 MySQL 并更新

python - 在 Flask 中读取 python 重写的图像

python - 如何使 Flask/Jinja2 加载可执行 zip 存档中的捆绑模板?

python - 为 Flask 创建身份验证装饰器的问题