【问题标题】:How to make a custom sql query in django?如何在 django 中进行自定义 sql 查询?
【发布时间】:2014-07-10 21:13:28
【问题描述】:

我需要进行查询,但这并不简单,因为我不能使用 django 的 Manager.raw()。 这是我的模型:

from django.db import models
from orion.apps.repuestos.models import Repuesto
from django.contrib.auth.models import User
from orion.apps.coches.models import Coche
from orion.apps.mecanicos.models import Mecanico
# Create your models here.
class Salida(models.Model):
        repuesto = models.ForeignKey(Repuesto)
        disponibilidad_actual = models.IntegerField(max_length=20)
        cantidad_salida = models.IntegerField(max_length=20)
        gasto = models.DecimalField(max_digits=10, decimal_places=2, blank=False)
        created = models.DateTimeField(auto_now_add=True)
        coche = models.ForeignKey(Coche)

class Remito(models.Model):
    mecanico = models.ForeignKey(Mecanico)
    created = models.DateTimeField(auto_now_add=True)
    user = models.ForeignKey(User)
    observacion = models.TextField(max_length=300, blank=False)

class Remito_Salida(models.Model):
    remito = models.ForeignKey(Remito)
    salida = models.ForeignKey(Salida)

我尝试使用此功能进行查询。我需要获取自与特定 Mecanico 关联的特定日期以来的所有 Salida
在我看来,我得到了这个代码:

def dictfetchall(cursor):
    "Returns all rows from a cursor as a dict"
    desc = cursor.description
    return [
        dict(zip([col[0] for col in desc], row))
        for row in cursor.fetchall()
    ]

def my_custom_sql(fi):
    cursor = connection.cursor()
    cursor.execute('SELECT repuestos_repuesto.nombre, coches_coche.unidad, mecanicos_mecanico.nombres, mecanicos_mecanico.apellidos, salidas_salida.created, salidas_salida.gasto FROM  salidas_salida, salidas_remito_salida, salidas_remito, coches_coche, mecanicos_mecanico, repuestos_repuesto WHERE salidas_salida.repuesto_id = repuestos_repuesto.id AND salidas_remito_salida.remito_id = salidas_remito.id AND salidas_remito_salida.salida_id = salidas_salida.id AND salidas_remito.mecanico_id = mecanicos_mecanico.id AND coches_coche.id = salidas_salida.coche_id AND salidas_salida.created >= "fi" AND  mecanicos_mecanico.id = 1;')
    row = dictfetchall(cursor)
    return row

fi 是一个日期。 1mecanico 的 ID。
我收到了这个错误:

ProgrammingError
attrib dows not exists «fi»
LINE 1: ...das_salida.coche_id AND salidas_salida.created >= "fi" AND  ...
                                                             ^

我正在使用 django 1.6 和 postgresql 9.1
我该如何解决这个问题?

【问题讨论】:

    标签: python sql django postgresql


    【解决方案1】:

    我猜你必须像这样编写 sql 查询,但不确定这会解决你的问题。

    def my_custom_sql(fi):
    cursor = connection.cursor()
    query = 'SELECT repuestos_repuesto.nombre, coches_coche.unidad, mecanicos_mecanico.nombres, mecanicos_mecanico.apellidos, salidas_salida.created, salidas_salida.gasto FROM  salidas_salida, salidas_remito_salida, salidas_remito, coches_coche, mecanicos_mecanico, repuestos_repuesto WHERE salidas_salida.repuesto_id = repuestos_repuesto.id AND salidas_remito_salida.remito_id = salidas_remito.id AND salidas_remito_salida.salida_id = salidas_salida.id AND salidas_remito.mecanico_id = mecanicos_mecanico.id AND coches_coche.id = salidas_salida.coche_id AND salidas_salida.created >= %s AND  mecanicos_mecanico.id = 1;'%fi
    cursor.execute(query)
    row = dictfetchall(cursor)
    return row
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-31
      • 2020-02-06
      • 1970-01-01
      • 2011-01-01
      • 2021-02-28
      • 1970-01-01
      • 2011-09-14
      • 1970-01-01
      相关资源
      最近更新 更多