Django中的原始SQL查询

时间:2013-04-24 09:25:11

标签: python sql django

此原始查询是否有任何问题?

Worker.objects.raw('Delete from costumer_worker Where costumer_ptr_id= %s', [costumer.id])

Costumer id返回一个字符串。但似乎没有任何事情发生,刺激后对象仍然存在

对象Worker是来自Costumer的子对象,我想保留客户,但删除Worker对象。

以下是CostumerWorker模型:

class Costumer(User):                                                    
    slug=models.SlugField(unique=True)
    description=models.TextField(null=True)
    phone=models.IntegerField(null=True)
    isWorker=models.BooleanField()

    def save(self,*args,**kwargs):                                        
        self.slug=slugify(self.username)                                          
        super(Costumer,self).save(*args, **kwargs)                             

    def __unicode__(self):
        return self.username


class Worker(Costumer):
    comment=models.ForeignKey(Comment, null=True)
    keyword=models.ManyToManyField('job.JobGenre', null=True)

    def __unicode__(self):
        return self.username

3 个答案:

答案 0 :(得分:6)

您可以通过connection.cursor()docs)直接删除您的记录:

from django.db import connection

cursor = connection.cursor()
cursor.execute('DELETE FROM costumer_worker WHERE costumer_ptr_id = %s', [costumer.id])
connection.commit()

但是,你要做的事情看起来太简单了,不能直接编写SQL,而是使用django ORM。

答案 1 :(得分:2)

您可能缺少提交交易。根据您的设置,您可能需要添加: django 1.4中的transaction.commit_unless_managed()(django 1.5中不需要,因为默认设置不同)

答案 2 :(得分:0)

使用这一行:

from django.db import connection, transaction
cursor = connection.cursor()
with transaction.commit_on_success():
   cursor.execute('DELETE FROM costumer_worker WHERE costumer_ptr_id = %s', [costumer.id])
   connection.commit()