我尝试运行此代码:
# -*- coding: utf-8 -*-
from django.core.management.base import BaseCommand
class Command(BaseCommand):
def handle(self, *args, **options):
from blogs.models import Blog, Post
from sitename.settings import DEFAULT_CHARSET
for blog in Blog.objects.all().using('old'):
try:
Blog.objects.get(old_id=blog.id)
continue
except:
pass
new_blog = Blog(
name = blog.name,
description=blog.description,
old_id = blog.id
)
new_blog.save()
但我有例外:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
我搜索了这个问题并找到了这个解决方案:
name = blog.name.encode('ascii','ignore')
结果令人不安:所有俄罗斯符号都被删除了。
"Пост номер 15-14" => "15-14"
如何正确复制数据?
答案 0 :(得分:1)
我想,你有一个或两个数据库的字符集有问题,你应该检查你从旧数据库获得的编码以及新数据库中的内容。
你的循环看起来很奇怪,Django在get_or_create
上有一个很好的函数QuerySet
方法,所以有很好的版本:
for blog in Blog.objects.all().using('old'):
Blog.objects.get_or_create(old_id=blog.id, defaults={'name': blog.name,
'description': blog.description})