Django Postgres查询结果针对不同的数据库字段获得不同的结果

时间:2019-03-09 12:54:28

标签: python django postgresql django-views

我在PostgreSQL中有2个简单的表。

表1(将数字保存在Varchar中):

class Numbers_char_model(models.Model):

    number = models.CharField(max_length=256, blank=True, null=True)

表2(将数字保存为整数):

class Numbers_int_model(models.Model):

    number = models.IntegerField(blank=True, null=True)

两个表中的数据相同。

id   number

1   ->  0

2   ->  20

3   ->  40

4   ->  70

5   ->  110

6   ->  150

当我点击以下查询时,它们都会给出不同的结果。

def number_query(request):

    ax_int = Numbers_int_model.objects.filter(number__lte='20')
    ax_char = Numbers_char_model.objects.filter(number__lte='20')

ax_int 输出-> 0.20

ax_char 输出-> 0,20,110,150

有人可以清除吗?

3 个答案:

答案 0 :(得分:1)

这是因为int比较和字符串比较不相同。字符串比较适用于每个字符到字符。在这里,对于您的情况,四个字符串的第一个字符为'0','2','1','1'。 2比所有的都大。所以这种类型的输出。

对于这种情况,首先我们需要将number字段强制转换为int,然后执行此操作。 extra link

是可能的
 Numbers_char_model.objects.extra({'number':  "CAST(number as INT)"}).filter_by(number__lte=20)

参考:link

答案 1 :(得分:0)

Numbers_char_model有一个CharField。您不能小于或等于字符串。 Numbers_int_model之所以有效,是因为Django ORM将字符串'20'转换为int。

答案 2 :(得分:0)

您可以将不带int main() { char poste[] ={'P', 'P', 'O', 'A', 'P', 'A', 'P', 'P'}; int nbCafe[] ={5, 1, 3, 0, 5, 1, 0, 2}; int age[] ={25, 19, 27, 22, 49, 24, 60, 29}; int nbPers = sizeof(age) / sizeof(int); int i; int ageProgMax = 0; for (i = 0; i < nbPers; i++) { if (poste[i] =='P' && (age[i] > ageProgMax)) { ageProgMax = age[i]; } } printf ("Max age of programmers : %d\n", ageProgMax); return 0; } (不推荐使用)的字符串强制转换为int。以下内容应能为您带来预期的结果(尽管使用IntegerField显然更明智):

extra