2012-06-24 23 views
1

我在一個明顯簡單的任務中遇到了一個奇怪的錯誤。Python 2.7.2 Ubuntu + Django 1.4;當「.objects.get(foo = unicodestr)」時發生深度複製遞歸錯誤「

我想查詢與Unicode字符串一個SQLite數據庫,並與以下模型:

from django.db import models 

class Uebersetzung(models.Model): 
    artikel = models.CharField(max_length=100) 
    deutsch = models.CharField(max_length=100) 
    turk = models.CharField(max_length=100) 
    added = models.DateTimeField(default=datetime.now) 

我只使用Django的模型和API,我的查詢看起來查詢發生在一個「獨立腳本」像這樣:

import os 
os.environ['DJANGO_SETTINGS_MODULE'] = 'turk.settings' 
from turk.parse.models import * 
... 

    # each is a tuple of eg. (u'das', u'Haus', u'bina') 
    try: 
     Uebersetzung.objects.get(artikel=each[0],deutsch=each[1],turk=each[2]) 
    except Uebersetzung.DoesNotExist: 
     tr = Uebersetzung(artikel=each[0],deutsch=each[1],turk=each[2]) 
     tr.save() 
     print "Adding \'%s %s -> %s\' to Uebersetzung" % (each[0],each[1],each[2]) 

即時得到這樣的錯誤:

File "/usr/lib/python2.7/copy.py", line 257, in _deepcopy_dict 
    y[deepcopy(key, memo)] = deepcopy(value, memo) 
    File "/usr/lib/python2.7/copy.py", line 190, in deepcopy 
    y = _reconstruct(x, rv, 1, memo) 
    File "/usr/lib/python2.7/copy.py", line 334, in _reconstruct 
    state = deepcopy(state, memo) 
    File "/usr/lib/python2.7/copy.py", line 163, in deepcopy 
    y = copier(x, memo) 
    File "/usr/lib/python2.7/copy.py", line 257, in _deepcopy_dict 
    y[deepcopy(key, memo)] = deepcopy(value, memo) 
    File "/usr/lib/python2.7/copy.py", line 190, in deepcopy 
    y = _reconstruct(x, rv, 1, memo) 
    File "/usr/lib/python2.7/copy.py", line 334, in _reconstruct 
    state = deepcopy(state, memo) 
    File "/usr/lib/python2.7/copy.py", line 163, in deepcopy 
    y = copier(x, memo) 
    File "/usr/lib/python2.7/copy.py", line 257, in _deepcopy_dict 
    y[deepcopy(key, memo)] = deepcopy(value, memo) 
    File "/usr/lib/python2.7/copy.py", line 190, in deepcopy 
    y = _reconstruct(x, rv, 1, memo) 
    File "/usr/lib/python2.7/copy.py", line 334, in _reconstruct 
    state = deepcopy(state, memo) 
    File "/usr/lib/python2.7/copy.py", line 163, in deepcopy 
    y = copier(x, memo) 
    File "/usr/lib/python2.7/copy.py", line 257, in _deepcopy_dict 
    y[deepcopy(key, memo)] = deepcopy(value, memo) 
    File "/usr/lib/python2.7/copy.py", line 190, in deepcopy 
    y = _reconstruct(x, rv, 1, memo) 
    File "/usr/lib/python2.7/copy.py", line 334, in _reconstruct 
    state = deepcopy(state, memo) 
    File "/usr/lib/python2.7/copy.py", line 163, in deepcopy 
    y = copier(x, memo) 
    File "/usr/lib/python2.7/copy.py", line 257, in _deepcopy_dict 
    y[deepcopy(key, memo)] = deepcopy(value, memo) 
    File "/usr/lib/python2.7/copy.py", line 190, in deepcopy 
    y = _reconstruct(x, rv, 1, memo) 
    File "/usr/lib/python2.7/copy.py", line 334, in _reconstruct 
    state = deepcopy(state, memo) 
    File "/usr/lib/python2.7/copy.py", line 163, in deepcopy 
    y = copier(x, memo) 
    File "/usr/lib/python2.7/copy.py", line 257, in _deepcopy_dict 
    y[deepcopy(key, memo)] = deepcopy(value, memo) 
    File "/usr/lib/python2.7/copy.py", line 190, in deepcopy 
    y = _reconstruct(x, rv, 1, memo) 
    File "/usr/lib/python2.7/copy.py", line 334, in _reconstruct 
    state = deepcopy(state, memo) 
    File "/usr/lib/python2.7/copy.py", line 163, in deepcopy 
    y = copier(x, memo) 
    File "/usr/lib/python2.7/copy.py", line 257, in _deepcopy_dict 
    y[deepcopy(key, memo)] = deepcopy(value, memo) 
    File "/usr/lib/python2.7/copy.py", line 190, in deepcopy 
    y = _reconstruct(x, rv, 1, memo) 
    File "/usr/lib/python2.7/copy.py", line 334, in _reconstruct 
    state = deepcopy(state, memo) 

任何想法S'

+1

只是一個提示:你爲什麼不使用[get_or_create(https://開頭docs.djangoproject.com/en/1.4/ref/models/querysets/#django.db.models.query.QuerySet.get_or_create)? – kosii

+0

我會看看那個,謝謝! – enthus1ast

回答

0

SOLUTION: 由於我使用BeautifulSoup我必須將它轉換爲Unicode:

try: 
    Uebersetzung.objects.get(artikel=unicode(each[0]),deutsch=unicode(each[1]),turk=unicode(each[2])) 

見:python - Problem storing Unicode character to MySQL with Django

+0

你應該[接受你自己的答案](http://blog.stackoverflow.com/2011/07/its-ok-to-ask-and-answer-your-own-questions/) –

+0

不必等待直到明天。接着我會! – enthus1ast