2011-02-06 44 views
1

cx_oracleがインストールされ、inspectdbが実行されました。出力がないようですか?誰かが助けることができますか? Oracleでinspectdbを使用することで既知の問題はありますか?Oracleデータベースを使用したDjango inspectdbの問題

以下はコマンドとsettings.pyです。それは私の作品

python manage.py inspectdb --database xxx_db 

# This is an auto-generated Django model module. 
# You'll have to do the following manually to clean this up: 
#  * Rearrange models' order 
#  * Make sure each model has one field with primary_key=True 
# Feel free to rename the models, but don't rename db_table values or field names. 
# 
# Also note: You'll have to insert the output of 'django-admin.py sqlcustom [appname]' 
# into your database. 

from django.db import models 

settings.py

DATABASES = { 
    'xxx_db': { 
     'ENGINE': 'django.db.backends.oracle', 
     'NAME': 'abc', 
     'USER': 'abc_read', 
     'PASSWORD': 'abc_read', 
     'HOST': 'apps.domain.com', 
     'PORT': 'xxxx' 
     }, 
    'default': { 
     'ENGINE': 'django.db.backends.mysql', 
     'NAME': 'aaaa', 
     'USER': 'aaaa', 
     'PASSWORD': 'xxxx', 
     'HOST': '/tmp/mysql.sock', 
     'PORT': '' 
     } 
} 
+0

oracle' 'のどのバージョンと'cx_oracle'はあなたを使っていますか? –

+0

Reiner - cx_Oracle-5.0.3およびOracle 10.2.0.4.0 – Kevin

答えて

0

ユーザーがOracleのすべてのテーブルを表示する権限を持っていることを確認しましたか?

とにかく私はinspectdbで使用されているSQLについて何か不思議です。

0

2つのこと:

  1. Inspectdbが正式にオラクルをサポートしていません(Django Docs - inspectdbを参照)悲しい回。
  2. DjangoはOracleスキーマを非常に強力にサポートしていません(unresolved Django ticket 6148参照)。スキーマのメインユーザーを使用して接続できれば、デフォルトスキーマをイントロスペクトするスキーマを作成する方がよい場合があります。

私は、introspection.pyのselectを変更することで、基本的なモデルファイルの出力を得ることができました。

def get_table_list(self, cursor): 
    "Returns a list of table names in the current database." 
    cursor.execute("SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = 'SCHEMA_TO_QUERY'") 
    return [row[0].lower() for row in cursor.fetchall()] 

def get_table_list(self, cursor): 
    "Returns a list of table names in the current database." 
    cursor.execute("SELECT TABLE_NAME FROM USER_TABLES") 
    return [row[0].lower() for row in cursor.fetchall()] 
しかし、私が読んだときジャンゴをあきらめた:私のために私はから(ライン40の周り)ジャンゴ/ DB /バックエンド/オラクル/ introspection.pyでget_table_list機能を変更しましたOracleのスキーマの全体的なサポートが不十分です

+0

これらの2つのクエリは構文的に同一です。定義上、['user_tables'](http://ss64.com/orad/USER_TABLES.html)には、ユーザーが所有するテーブルの定義しか含まれていません。また、 'myschema'は大文字にする必要があります.... – Ben

+0

@Ben、ALL_TABLESを照会してスキーマ名をよりわかりやすいように編集するだけです。ありがとう – Plecebo

0

Haaaa ..この問題に直面して、ばかげた理由が見つかりました!

投稿のいずれかで行われたように、下位層のファイルを編集する必要はありません。あなたは、このデータベースにテーブルを持たないときにこの問題に直面します。 Hehe ..

Create a few tables and then tryそれは魅力のように働く。

0

@Pleceboは正しい方向にあります。 get_table_listメソッドが問題の原因ですが、指定されたSelect文が機能しませんでした。

私は一時的にハードすばやく私が必要なものを得るためにテーブル名をコード化:

(ジャンゴ/ DB /バックエンド/オラクル/ introspection.pyライン40)

def get_table_list(self, cursor): 
    "Returns a list of table names in the current database." 
    #cursor.execute("SELECT TABLE_NAME FROM USER_TABLES") 
    return ['table_name1', 'table_name2'] 
    #return [row[0].lower() for row in cursor.fetchall()] 
関連する問題