Maison > base de données > tutoriel mysql > Comment convertir un CharField en entier dans les requêtes Django ORM ?

Comment convertir un CharField en entier dans les requêtes Django ORM ?

Barbara Streisand
Libérer: 2024-11-03 12:34:30
original
1101 Les gens l'ont consulté

How to Convert a CharField to an Integer in Django ORM Queries?

Casting Char en Integer 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>
Copier après la connexion

Requête standard :

<code class="python">students.objects.filter(student_id__contains="97318").order_by('-student_id')</code>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal