Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django db.connection.cursor.fetchone()返回意外结果_Django_Rawsql - Fatal编程技术网

Django db.connection.cursor.fetchone()返回意外结果

Django db.connection.cursor.fetchone()返回意外结果,django,rawsql,Django,Rawsql,我的模特里有个经理 class ItemManager(models.Manager): def get_fee(self): from django.db import connection cursor = connection.cursor() cursor.execute(""" SELECT fee FROM item WHERE itemID = %d AND item.type = %d """,

我的模特里有个经理

class ItemManager(models.Manager):
 def get_fee(self):
 from django.db import connection
    cursor = connection.cursor()
    cursor.execute("""
        SELECT fee
        FROM item
        WHERE itemID = %d AND item.type = %d 
        """, [self.myItemID, self.myItemType])
    fee = cursor.fetchone()
    return fee
和阶级

Sample(models.Model):
sampleID = models.AutoField(primary_key=True)
itemID = models.ForeignKey(Item)
item.type  = models.ForeignKey(Item)
    ...

def save(self, *args, **kwargs):
    is_new = self.pk is None
    super(Sample, self).save(*args, **kwargs)
    if is_new:
        cd.amount = MonthlyFeeManager() 
        cd.save()
然后它会产生一个错误:

Cannot convert <myapp.models.ItemManager object at 0xa6f07ec> to Decimal
无法转换为十进制

通常,我希望在管理器中执行原始SQL查询,并使用它从查询中获得结果。我试图搜索,但大多数返回是元组,而不是值。

这不是管理器的使用方式。即使使用一个完全正常的类实例,您的尝试也无法满足您的需要:您需要实例化它并在实例上调用
get\u fee()

对于管理器,您不需要实例化它,因为这已经作为模型上的
objects
属性为您完成了。但是您仍然需要调用相关的方法:

cd.amount = Sample.objects.get_fee()
然而,这仍然行不通。这是因为您引用了管理器对象上不存在的
self.myItemId
self.myItemType
。这让我得出结论,您根本不需要Manager对象:您只需要一个标准的模型方法。而且也不需要原始SQL:您的代码完全可以使用正常的模型查询语法轻松地表达出来


(我不能告诉你它到底是什么样子,因为你的例子中的外键没有任何意义,而且不清楚
费用
应该从哪里来。)

你误用了经理。事实上,所有这些代码看起来都很奇怪。这是您的实际代码还是通用示例?关系看起来不正确,属性名称也不正确。这只是一个示例。你可以忽略我上面的代码。我只是想让cd.amount在执行sql查询时从另一个表中获取一个值(或者可能有另一种方法)。是的,但是如果您的代码示例甚至不能远程反映您正在做的事情,我们就帮不了您。您只需在save方法中执行查询,然后将值分配给
amount
。但是这种方法对于您的应用程序来说都是猜测。