Maison > Article > base de données > Comment convertir un CharField en entier dans les requêtes Django ORM ?
Dans Django ORM, vous pouvez rencontrer des scénarios dans lesquels vous devez convertir un CharField en un entier à des fins d'interrogation. Explorons les options disponibles :
Requête originale :
<code class="mysql">select student_id from students where student_id like "%97318%" order by CAST(student_id as UNSIGNED) desc;</code>
Requête standard :
<code class="python">students.objects.filter(student_id__contains="97318").order_by('-student_id')</code>
Cette requête ne dispose pas de la fonctionnalité de conversion de la requête MySQL, ce qui entraîne une incompatibilité.
Utilisation de la fonction Cast :
À partir de Django 1.10, la fonction Cast permet la conversion de champs en différents types de données. Dans ce cas, vous pouvez utiliser :
<code class="python">from django.db.models import FloatField from django.db.models.functions import Cast students.objects.annotate(student_id_int=Cast('student_id', FloatField()))\ .filter(student_id__contains="97318").order_by('-student_id_int')</code>
Requête brute :
Comme alternative, vous pouvez utiliser une requête brute pour réaliser le casting :
<code class="python">from django.db import connection cursor = connection.cursor() cursor.execute(""" SELECT student_id FROM students WHERE student_id LIKE '%%97318%%' ORDER BY CAST(student_id AS UNSIGNED) DESC """) student_ids = cursor.fetchall()</code>
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!