3

Django プロジェクトを SQLite から Oracle に移行していますが、disn_requisition.save() の行で、null ID があると主張するエラーがスローされます。どのモデルでも id フィールドを手動で設定したりいじったりしたことはありませんが、それらは読んでいます。

これに対処するために何をする必要があるかについての洞察はありますか?

IntegrityError at /upload/storage

ORA-01400: cannot insert NULL into ("INVDB"."INVDB_DISK_REQUISITION"."ID")
Request Method: POST
Request URL: [url here]
Django Version: 1.2.3
Exception Type: IntegrityError
Exception Value: 
ORA-01400: cannot insert NULL into ("INVDB"."INVDB_DISK_REQUISITION"."ID")
Exception Location: /tools/python/2.7/Linux_x86_64/lib/python2.7/site-packages/django/db/backends/oracle/base.py in execute, line 507
Python Executable: /tools/python/2.7/Linux_x86_64/bin/python
Python Version: 2.7.0
Python Path: ['/home/jhayward/invdb', '/tools/python/2.7/Linux_x86_64/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg', '/tools/python/2.7/Linux_x86_64/lib/python2.7/site-packages/django_filter-0.5.3-py2.7.egg', '/tools/python/2.7/Linux_x86_64/lib/python2.7/site-packages/ez_setup-0.9-py2.7.egg', '/tools/python/2.7/Linux_x86_64/lib/python2.7/site-packages/distribute-0.6.14-py2.7.egg', '/tools/python/2.7/Linux_x86_64/lib/python2.7/site-packages/hgsvn-0.1.8-py2.7.egg', '/tools/python/2.7/Linux_x86_64/lib/python2.7/site-packages/paramiko-1.7.6-py2.7.egg', '/tools/python/2.7/Linux_x86_64/lib/python2.7/site-packages/pycrypto-2.3-py2.7-linux-x86_64.egg', '/tools/python/cx_Oracle/10g/2.6/Linux_x86_64/lib/python2.6/site-packages', '/home/jhayward', '/home/jhayward/invdb/HOME_DIRECTORY', '/home/jhayward/invdb/HOME_DIRECTORY/invdb', '/tools/python/2.7/Linux_x86_64/lib/python27.zip', '/tools/python/2.7/Linux_x86_64/lib/python2.7', '/tools/python/2.7/Linux_x86_64/lib/python2.7/plat-linux2', '/tools/python/2.7/Linux_x86_64/lib/python2.7/lib-tk', '/tools/python/2.7/Linux_x86_64/lib/python2.7/lib-old', '/tools/python/2.7/Linux_x86_64/lib/python2.7/lib-dynload', '/tools/python/2.7/Linux_x86_64/lib/python2.7/site-packages', '/tools/python/2.7/Linux_x86_64/lib/python2.7/site-packages/setuptools-0.6c11-py2.7.egg-info']
Server time: Thu, 30 Dec 2010 10:04:24 -0600
4

1 に答える 1

3

この質問をd​​jango-users@googlegroups.comに投稿し、次の回答を得ました。

「問題はSQLiteとOracleの違いにあります。MySQL、PostgresQL、SQLIteとは異なり、Oracleには自動生成された主キーがありません。これを補うために、Oracle上のDjangoはDjangoが管理するテーブルごとにトリガーを使用します。挿入時にNULLの主キーを認識し、そのテーブル専用のシーケンスを使用してキーを生成します。通常、テーブルを最初から作成する場合、Django管理ツール(syncdb、sqlallなど)がシーケンスを作成し、スキーマにどのようにデータが入力されたかを詳しく知らなければ、何が悪かったのかを判断するのは難しいですが、「python manage.py sqlall invdb」を実行すると、DDLが出力されてトリガーとシーケンスが作成され、手動で追加できます。彼ら。"

私の場合、エラーはこれに関連する二次的な損傷である可能性がありますが、「python manage.py syncdb」が最初にクラッシュし、標準の回避策として、エラーが報告されずに実行されたときに2回実行しました。これを他の人に渡したので、どのように解決されたかはわかりませんが、トリガーの欠落はクラッシュに関連する二次的な損傷である可能性があり、データベースタイプにコードを配置することで解決されたと思います。問題のあるモデルにトリガーがありました。

于 2011-02-07T13:32:16.453 に答える