Pergunta

O banco de dados é MySQL.

Eu uso o django.contrib.auth.

Aqui estão todas as informações:

manage.py dumpdata auth > my_auth.json --natural --exclude contenttypes

Em seguida, excluí todo o banco de dados (descarte o banco de dados my_database) e criei um novo banco de dados (crie o banco de dados new_database) (use ./manage.py syncdb para criar todas as tabelas).

Então

gerenciar.py carregar dados meu_auth.json

Recebi um erro:

Erro de integridade:(1062, "Entrada duplicada '3-add_author' para chave 2")

Qual é o problema?

Qualquer ajuda será muito apreciada.Obrigado!

Foi útil?

Solução

(Atualizada)

Você está certo (seus comentários abaixo).O problema é de fato com auth.permission.

Quando você corre syncdb, auth.permission é preenchido automaticamente com valores padrão para todos os modelos instalados.Quaisquer execuções subsequentes de syncdb adicionará novas entradas para quaisquer modelos que foram adicionados recentemente.

Se posteriormente você redefinir o banco de dados e executar syncdb novamente, os valores serão preenchidos novamente e dependendo da ordem em que os modelos instalados são inspecionados, as permissões associadas podem ser adicionadas em uma ordem diferente, fornecendo ids diferentes do seu banco de dados anterior (se os modelos foram instalados em etapas).

Para evitar esse problema, você pode sair auth.permission fora ao despejar seu auth dados (como você já apontou em seus comentários) ou redefinindo o auth.permission tabela antes de carregar seu despejo de dados.

Além disso, é importante usar chaves naturais (--natural) ao despejar seus dados para que não façam referência a dados relacionados usando seu ID inteiro (que pode não ser o mesmo quando carregado em outro banco de dados).Esse recurso foi introduzido no Django 1.2.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top