在 Django ORM 中查询时如何将字符转换为整数?

How do i cast char to integer while querying in django ORM?(在 Django ORM 中查询时如何将字符转换为整数?)
本文介绍了在 Django ORM 中查询时如何将字符转换为整数?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

最近开始使用Django ORM.我想执行这个查询

 select student_id from student_id like "%97318%" order by CAST(student_id as UNSIGNED) desc;

其中 student_id 是一个 CharField,我希望将其作为整数进行查询.我试过

 student.objects.filter(student_id__contains "97318").order('-student_id')

工作正常.但是不知道也找不到如何将student_id"转换为 int 就像上面提到的Django ORM"的实际 MySQL 查询一样.我应该使用原始查询还是有出路?让我知道您的建议.

解决方案

无需使用 extra 的更新替代方案是 cast 函数(Django 1.10 中的新功能):

<预><代码>>>>从 django.db.models 导入 FloatField>>>从 django.db.models.functions 导入 Cast>>>Value.objects.create(整数=4)>>>value = Value.objects.annotate(as_float=Cast('integer', FloatField())).get()>>>>打印(value.as_float)4.0

来自 https://docs.djangoproject.com/en/1.10/ref/models/database-functions/#cast

Recently started using Django ORM.I want to execute this query

 select student_id from students where student_id like "%97318%" order by CAST(student_id as UNSIGNED) desc;   

where student_id is a CharField which I want as integer for querying. I tried with

  students.objects.filter(student_id__contains "97318").order('-student_id')

works fine. But don't know and couldn't find how to cast "student_id" to int like the actual MySQL query mentioned above with "Django ORM". should I use raw query or is there a way out? Let me know your suggestions.

解决方案

An updated alternative without requiring the use of extra is the cast function (new in Django 1.10):

>>> from django.db.models import FloatField
>>> from django.db.models.functions import Cast
>>> Value.objects.create(integer=4)
>>> value = Value.objects.annotate(as_float=Cast('integer', FloatField())).get()> 
>>> print(value.as_float)
4.0

From https://docs.djangoproject.com/en/1.10/ref/models/database-functions/#cast

这篇关于在 Django ORM 中查询时如何将字符转换为整数?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Hibernate reactive No Vert.x context active in aws rds(AWS RDS中的休眠反应性非Vert.x上下文处于活动状态)
Bulk insert with mysql2 and NodeJs throws 500(使用mysql2和NodeJS的大容量插入抛出500)
Flask + PyMySQL giving error no attribute #39;settimeout#39;(FlASK+PyMySQL给出错误,没有属性#39;setTimeout#39;)
auto_increment column for a group of rows?(一组行的AUTO_INCREMENT列?)
Sort by ID DESC(按ID代码排序)
SQL/MySQL: split a quantity value into multiple rows by date(SQL/MySQL:按日期将数量值拆分为多行)