mysql - 将 Django 项目从 MySQL 迁移到 Oracle

标签 mysql django oracle ora-00942 ora-00001

我有一个 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 邮件列表中的建议:

  1. 在连接到 MySQL 时转储所有内容: python manage.py dumpdata > fixture.json

  2. 创建一个具有空模式的新 Oracle 用户并将数据库连接切换到 Oracle(没有执行 syncdb)

  3. 使用以下命令将数据加载到 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/

相关文章:

django - 电子邮件正文显示 html 代码代替 django 中的模板

oracle - "type"和 "subtype"关键字有什么区别?

java - 从 Oracle DB 检查已提交的事务

oracle - 使用 MAX() 在提交物化 View 上可刷新

mysql - 在 MySql 中按时间对 COUNT 进行分组

mysql:使用连接更新

python - Django 1.4 SimpleListfilter 排序错误

php - 使用 pdo 回显 mysql 数据库的最后 10 个结果

php - 为什么 echo 在此脚本中不起作用?

django - 单个网站的 DNS_PROBE_FINISHED_NXDOMAIN