🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1638閲覧

Djangoアプリ ごとに接続するデータベースを変える

xx_6_6_xx

総合スコア42

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/11/20 01:08

編集2019/11/20 01:09

前提・実現したいこと

アプリ毎に、接続するデータベースを変えたいです。。。
((アプリ名がapp1のときはdb1、app2のときはdb2 それ以外はdb1))

app1のときは、問題無く接続できます。
app2のほうが接続できません。。。

【setting.py】

Django

1DATABASES = { 2 'db1': { 3 'ENGINE': '***', 4 'NAME': '***', 5 'USER': '***', 6 'PASSWORD': '***', 7 'HOST': '***', 8 'PORT': '***', 9 }, 10 'db2': { 11 'ENGINE':'sql_server.pyodbc', 12 'NAME':'test', 13 'USER':'user', 14 'PASSWORD':'******', 15 'HOST':'127.0.0.1', 16 'PORT':'****', 17 18 'OPTIONS':{ 19 'driver':'ODBC Driver 13 for SQL Server', 20 }, 21 } 22 23}

【dbrouter.py】

Django

1class Router(object): 2 3 def db_for_read(self, model, **hints): 4 if model._meta.app_label == "app1": 5 return None 6 if model._meta.app_label == "app2": 7 return "db2" 8 return "db1" 9 10 def db_for_write(self, model, **hints): 11 if model._meta.app_label == "app1": 12 return None 13 if model._meta.app_label == "app2": 14 return "db2" 15 return "db1" 16 17 def allow_relation(self, obj1, obj2, **hints): 18 if obj1._meta.app_label == "app1" and obj2._meta.app_label == "app1": 19 return None 20 if obj1._meta.app_label == "app2" and obj2._meta.app_label == "app2": 21 return "db2" 22 return "db1" 23 24 def allow_migrate(self, db, app_label, model=None, **hints): 25 if app_label == "app1": 26 return db == "db1" 27 if app_label == "app2": 28 return db == "db2" 29 else: 30 return db == "db1" 31

発生している問題・エラーメッセージ

manage.py inspectdb --database [DB名] をすると
モデル定義が一覧で出てくるので、setting.pyは間違っていないと思っています。。
となると、dbrouter.pyに不備があるのでしょうか。。。

備考

こういう、設定系の質問は回答が得られにくいかもしれないのですが、、
明らかに間違っている所などありましたら、教えてください。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/11/20 02:06

settings.pyにDATABASE_ROUTERSの設定はありますか?
xx_6_6_xx

2019/11/20 02:13 編集

コメントありがとうございます! まさにその1行がありませんでした。。。 追加すると、上手く動作しました・・・! ありがとうございます;;;
guest

回答1

0

自己解決

dameo さんにコメント頂いた通り、
>settings.pyにDATABASE_ROUTERSの設定
が抜けていたので、defaultの方を見に行っていたようです。。。

投稿2019/11/22 07:48

xx_6_6_xx

総合スコア42

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問