"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como converter um CharField para um número inteiro no Django ORM?

Como converter um CharField para um número inteiro no Django ORM?

Publicado em 2024-11-10
Navegar:301

How to Cast a CharField to an Integer in Django ORM?

Conversão de campo Char para inteiro no Django ORM

Ao consultar com Django ORM, você pode encontrar cenários em que precisa converter um campo de personagem para um número inteiro. Isso pode surgir quando o campo é armazenado como um CharField, mas você deseja realizar cálculos ou comparações usando valores inteiros.

Por que CAST não está disponível?

Em versões anteriores do Django, consultas SQL brutas ou funções de banco de dados eram necessárias para tais cenários. No entanto, com a introdução da função Cast no Django 1.10, você pode conseguir essa conversão dentro do próprio ORM.

Usando a função Cast

Para lançar um CharField para um inteiro, use a seguinte sintaxe:

from django.db.models import Cast, IntegerField

students.objects.annotate(
    student_id_int=Cast('student_id', IntegerField())
).filter(student_id_int__contains=97318).order_by('-student_id_int')

Isso anotará o conjunto de consultas com um novo campo chamado student_id_int, que é convertido em um tipo inteiro. Você pode então usar esse novo campo para filtrar e ordenar conforme desejado.

Benefícios do uso do Cast

O uso do Cast oferece vários benefícios:

  • Type-safe: Garante que o valor resultante seja do tipo especificado.
  • Evita Raw Consultas: Mantém suas consultas dentro do ORM, simplificando a manutenção e reduzindo o risco de injeção de SQL.
  • Eficiente: Realiza a conversão de forma eficiente no nível do banco de dados.

Referência

Para mais informações sobre casting no Django ORM, consulte o documentação:

  • [Funções de banco de dados: Cast](https://docs.djangoproject.com/en/stable/ref/models/database-functions/#cast)
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3