2017-08-10 4 views
1

MyModel.objectsを参照すると、Django FWKを使用して既存のSQL-SERVERデータベースを読み込み、データベースに正常に接続してください。すべて() Djangoは引用符で囲まれたテーブル名とクエリを起動しますが、SQL-Serverは、プレフィックススキーマを必要とするので、それは失敗し、エラーを取得:テーブルをsql-serverとしてモデリングする方法[schema_name]。[table_name]

('42S02', "[42S02] [Microsoft][SQL Server Native Client 11.0][SQL Server]Invalid object name 'table_name'. (208) (SQLExecDirectW)") 

EDIT:これは唯一の非「デフォルト」で発生しますdjangoデータベース設定。私のデフォルトデータベースは特別な扱いを必要とせず、デフォルトスキーマのないdbユーザーを持つSQLサーバーデータベースです。

モデルや設定をどのように設定できますか.DATABASEまたはdbrouterを使用すると、djangoが特定のスキーマに接続し、schema_nameを使用する必要はありませんか?

オプション1:モデルのMetaクラスのプロパティ:DB_Tableの= 'schema_name.table_name' が動作しない、構築するクエリは、[SCHEMA_NAME]であるFROM句[schema_name.table_name]として、どのようなSQLのニーズがあるため、 。[TABLE_NAME]

オプション2:settings.DATABASE 'NAME' は既にSCHEMA_NAMEを指し、それは十分ではありません

オプション3:特定のスキーマに接続するためにはDjango伝えるためにどのように全く分かりませんまたはプレフィックススキーマ名をすべての作成するクエリ。

オプション4:make djangoは、大括弧でdb_tableを囲まないでください。 db_tableを 'schema.table'と定義すると、結果のクエリは[schema.table]で囲みます。 "[]"がなければ大括弧のクエリが機能します。

+0

オブジェクトに接頭辞を付けるスキーマが1つだけ必要な場合は、ユーザーのデフォルトスキーマとしてisを設定できます。つまり、スキーマを持たないMyTableを参照するとエラーは発生しません.SQL Serverはまずユーザーのデフォルトスキーマでそれを探してからdboを試行し、オブジェクトがデフォルトで見つからない場合にのみ失敗しますスキーマまたはdbo – sepupic

+0

関連する質問:[SQLクエリのデフォルトスキーマを設定](https://stackoverflow.com/q/4942023/2144390) –

+0

ユーザーのデフォルトスキーマを変更する特権はありませんが、唯一の方法は、おそらく私はそれを上位のエシェロンに申請することができます... – toscanelli

答えて

1

Djangoは複数のスキーマをサポートしていません。接続ユーザーのデフォルトスキーマを使用します。

しかし、これはPostgreSQLとSQL Serverの両方で、ピンチで私のために働いています

db_table = 'your_schema\".\"your_table'

た場合やDjangoは、複数のスキーマのサポートを提供しています(ここでの議論の多くの年:https://code.djangoproject.com/ticket/6148)を、この意志をおそらく壊れてしまう。私のプロジェクトでは大丈夫ですが、公式にはサポートされていないため、プロジェクトごとに評価する必要があります。

だけでなく、この上で作業を開始した昨年からPRがありました:https://github.com/django/django/pull/6162

幸運を!

関連する問題