gpt4 book ai didi

Python sqlalchemy order_by 数学运算(除法)不对结果进行排序

转载 作者:太空宇宙 更新时间:2023-11-03 14:07:46 25 4
gpt4 key购买 nike

我的数据库中有两个整数列 times_seentimes_answered_ Correctly。现在,我想选择所有已出现超过 100 次的元素,并通过数学运算对它们进行排序 (times_answered_ Correctly/times_seen)。

我正在使用以下代码,它可以工作并且不会给出任何错误:

top_10_hardest = db_session.query(QuizItems).filter(QuizItems.times_seen >= 100).order_by(QuizItems.times_answered_correctly / QuizItems.times_seen).all()

我还尝试了 .order_by(asc(QuizItems.times_answered_ Correctly/QuizItems.times_seen))desc()。结果发生了变化,但仍然是随机排序的。

{% for i in top_10_hardest %}
<p> {{ i.times_answered_correctly/i.times_seen }} </p>
{% endfor %}

给出:

0.9858490566037735

0.8082788671023965

0.7952941176470588

0.9202127659574468

0.7591623036649214

0.9950980392156863

0.9907621247113164

0.9905660377358491

0.39420935412026725

0.9931506849315068

为什么不起作用?

最佳答案

问题在于这些列是Integer列,尽管.order_by(asc(QuizItems.times_answered_ Correctly/QuizItems.times_seen)中没有错误,但所有值都有已四舍五入为整数,即 10

在 View 函数中,我将结果显示为:

<p> {{ i.times_answered_correctly/i.times_seen }} </p>

这是我第一次做正确的数学运算,但在对项目进行排序之前,请记住排序函数不起作用,因为它将元素视为整数。

解决方案:

我使用 cast() 函数修复了该问题。我在 order_by() 函数中将 Integer 元素转换为 Float:

db_session.query(QuizItems).filter(QuizItems.times_seen >= 100).order_by(cast(QuizItems.times_answered_correctly, Float) / cast(QuizItems.times_seen, Float)).all()

关于Python sqlalchemy order_by 数学运算(除法)不对结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48747220/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com