Rumah  >  Artikel  >  pangkalan data  >  Bagaimana untuk Menukar CharField kepada Integer dalam Pertanyaan ORM Django?

Bagaimana untuk Menukar CharField kepada Integer dalam Pertanyaan ORM Django?

Barbara Streisand
Barbara Streisandasal
2024-11-03 12:34:301004semak imbas

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

Menghantar Char kepada Integer dalam Django ORM Pertanyaan

Dalam Django ORM, anda mungkin menghadapi senario di mana anda perlu menukar CharField kepada integer untuk tujuan pertanyaan. Mari terokai pilihan yang tersedia:

Pertanyaan Asal:

<code class="mysql">select student_id from students where student_id like "%97318%" order by CAST(student_id as UNSIGNED) desc;</code>

Pertanyaan Standard:

<code class="python">students.objects.filter(student_id__contains="97318").order_by('-student_id')</code>

Pertanyaan ini tidak mempunyai fungsi pemutus pertanyaan MySQL, mengakibatkan ketidakpadanan.

Menggunakan Fungsi Cast:

Dari Django 1.10 dan seterusnya, fungsi Cast membolehkan penghantaran medan untuk pelbagai jenis data. Dalam kes ini, anda boleh menggunakan:

<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>

Pertanyaan Mentah:

Sebagai alternatif, anda boleh menggunakan pertanyaan mentah untuk mencapai pemutus:

<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>

Atas ialah kandungan terperinci Bagaimana untuk Menukar CharField kepada Integer dalam Pertanyaan ORM Django?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn