Python sqlalchemy order_by math operation(divide)不对结果进行排序

时间:2018-02-12 13:05:36

标签: python sqlalchemy

我的数据库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

为什么它不起作用?

1 个答案:

答案 0 :(得分:1)

问题是列是Integer列,尽管.order_by(asc(QuizItems.times_answered_correctly / QuizItems.times_seen)中没有错误,但所有值都已四舍五入为整数,即1或{{1} }

在视图功能中,我将结果显示为:

0

这是我第一次做正确的数学运算,但是在订购商品之前,请记住订单功能不起作用,因为它将元素视为整数。

<强> SOLUTION:

我用<p> {{ i.times_answered_correctly/i.times_seen }} </p> 函数解决了这个问题。我将cast()元素投放到Integer函数中的Float

order_by()