我有一个 Django1.1 项目,它使用旧版 MySQL 数据库。 我正在尝试将此项目迁移到 Oracle(xe 和 11g)。 我们有两种迁移选择: - 使用 SQL 开发人员创建迁移 sql 脚本。 - 使用 Django fixtures。
使用 sql 开发人员的 sql 脚本创建的架构与从 syncdb 创建的架构不匹配。例如,Django 需要 TIMESTAMP 列,而 sql 开发人员创建 DATE 列。
将 syncdb 与 Django fixtures 一起使用可能很棒,但是当尝试将 MySQL fixtures 加载到 Oracle 中时,在使用 syncdb 之后,我得到: IntegrityError: ORA-00001: 违反唯一约束 (USER.SYS_C004253)
我如何找到造成完整性错误的部分?
更新: 按照我尝试过的 django 邮件列表中的建议:
在连接到 MySQL 时转储所有内容: python manage.py dumpdata > fixture.json
创建一个具有空模式的新 Oracle 用户并将数据库连接切换到 Oracle(没有执行 syncdb)
使用以下命令将数据加载到 Oracle: python manage.py loaddata fixture.json
我在使用 loaddata 时没有收到错误,但是在运行服务器并导航到 localhost:8000 时我得到: ORA-00942: 表或 View 不存在
谢谢
最佳答案
您可以查询 oracle 信息模式(称为 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'
关于mysql - 将 Django 项目从 MySQL 迁移到 Oracle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2680995/