Перенос проекта Django из MySQL в Oracle - PullRequest
1 голос
/ 21 апреля 2010

У меня есть проект Django1.1, который работает с устаревшей базой данных MySQL. Я пытаюсь перенести этот проект в Oracle (xe и 11g). У нас есть два варианта миграции: - Использование разработчика SQL для создания сценария миграции SQL. - Используйте светильники Django.

Схема, созданная с помощью сценария sql от разработчика sql, не соответствует схеме, созданной из syncdb. Например, Django ожидает столбцы TIMESTAMP, в то время как SQL-разработчик создает столбцы DATE.

Использование syncdb с приборами Django может быть полезным, но при попытке загрузить приспособления MySQL в Oracle после использования syncdb я получаю: IntegrityError: ORA-00001: уникальное ограничение (USER.SYS_C004253) нарушено

Как узнать, какая часть создает ошибку целостности?

обновление: Следуя совету в списке рассылки django, который я пробовал:

  1. сбросить все данные при подключении к MySQL: python manage.py dumpdata> fixture.json

  2. Создал нового пользователя Oracle с пустой схемой и переключил соединение db на Oracle (не выполнял syncdb)

  3. загрузка данных в Oracle с: python manage.py loaddata fixture.json

Я не получаю сообщение об ошибке при использовании loaddata, но при запуске сервера и переходе на localhost: 8000 я получаю: ORA-00942: таблица или представление не существует

Спасибо

1 Ответ

0 голосов
/ 21 апреля 2010

Можно запросить информационную схему оракула (называемую Oracle Datadictionary), чтобы запросить список ограничений для всех таблиц, чтобы определить имя таблицы и столбец для указанного ограничения.

select TABLE_NAME, COLUMN_NAME from user_cons_columns where CONSTRAINT_NAME = 'SYS_C004253'

Обновление

Из-за требований безопасности словарь данных разделен на отдельные части. Пользователь A не может видеть таблицы и ограничения от пользователя B.

Если вы не можете найти информацию, вы можете использовать учетную запись пользователя dba, которая имеет глобальный доступ и запрашивает часть dba словаря данных.

connect system/<the_secret_password>
select TABLE_NAME, COLUMN_NAME from dba_cons_columns 
where CONSTRAINT_NAME = 'SYS_C004253' and OWNER = 'USER'
...