Python 2.7.2 Ubuntu + Django 1.4;".objects.get(foo=unicodestr)"时出现深度复制递归错误



我在一个明显简单的任务上遇到了一个奇怪的错误。

我想使用Unicode字符串和以下模型查询sqlite DB:

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)

有什么想法吗?

解决方案:由于我使用BeautifulSoup,我必须将其转换为Unicode:

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

参见: python - 使用 Django 将 Unicode 字符存储到 MySQL 时出现问题

最新更新