2013-04-24 95 views
3

這個原始查詢有沒有什麼錯誤?Django中的原始SQL查詢

Costumer id返回一個字符串。但似乎沒有任何事情發生,對象仍在那裏後excuttion

對象Worker是從Costumer子對象,我想保持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

你爲什麼不使用這一Django的ORM?它應該像'Worker.objects.filter(ptr = costumer).delete()'一樣簡單。 – 2013-04-24 09:39:10

+0

我該怎麼辦?對象Worker是來自costumer的子對象,我想保留這個costumer,但是刪除這個worker對象 – hln 2013-04-24 09:50:40

+0

用你的模型更新這個問題。 – 2013-04-24 09:51:20

回答

2

您可能會丟失comitting的transcation。根據您的設置,您可能需要添加: transaction.commit_unless_managed()在Django 1.4(不需要在Django 1.5,因爲默認設置是不同的)

+0

我把transaction.commit_unless_managed()放在它後面,但仍然沒有發生 – hln 2013-04-24 09:51:27

6

您可以通過connection.cursor()直接刪除你的記錄(S)(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。

+0

當我使用worker.delete()時,它會從父模型和子模型 – hln 2013-04-24 10:12:16

+0

@hin中刪除所有對象,請顯示您的Worker和Costumer模型。 – alecxe 2013-04-24 10:20:45

+0

cursor = connection.cursor() 既不工作也不工作 – hln 2013-04-24 10:38:07

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()