3

这个原始查询有什么问题吗?

Worker.objects.raw('Delete from customer_worker Where customer_ptr_id= %s', [customer.id])

客户 id 返回一个字符串,但似乎什么也没发生,执行后对象仍然存在。

对象 Worker 是 的子对象Customer,我想保留客户,但删除该Worker对象。

以下是CustomerWorker型号:

class Customer(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(Customer,self).save(*args, **kwargs)                             

    def __unicode__(self):
        return self.username


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

    def __unicode__(self):
        return self.username
4

3 回答 3

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。

于 2013-04-24T10:01:36.077 回答
2

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

于 2013-04-24T09:38:55.487 回答
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()
于 2015-03-09T09:00:36.503 回答