質問: Djangoで外部のデータベース(今回はSQLServer)に接続してデータのやりとりをするアプリを開発しています。 外部データベースへの接続、及び、SQL実行には[pyodbc]を使用しており、SQLの実行やレコードセットの取得等は無事に出来ています。 settings.pyのデータベース接続先は何も変更しておらず、未だ「sqlite」のままです。 --- 前置きが長くなりましたが、今回は、 ユーザが外部データベース内のテーブルを直接編集出来るマスタメンテの画面を作成ことが目的です。 全レコードを表示して好きな箇所を編集し、保存をするとテーブル自体を更新される(.Netのデータ・バインディングの様なイメージ)を作れたら理想かと思っています。 外部データベースに既に作成されているテーブルをModelとしてDjango内に反映出来ればもしかして・・・?とも考えてはいるのですが反映のさせかたが分からず試せていない状態です。 テーブル自体の更新が不可能であればフォームのPost処理等で変更があった行のみをループして一件づつ更新していくしかないのかなと思っています。 --- Djangoで外部データベースのマスタメンテナンス画面(またはそれに近いもの)を作成したことある方いましたら是非おすすめの方法を教えては頂けないでしょうか
回答: ``` 1.既にDjangoとは関係ないDBが存在する 2.スキーマ管理(migration)などはしないが、DjangoのORMなどでデータは操作はしたい。 ``` みたいなイメージでしょうか? Django では複数のデータベースを扱う時に DatabaseRouterという機能を使います。 その時に、DBに対してmigrationを許可しないようにすることもできます。やることとしては、 ``` 1.外部DBの接続情報をsettings.py の DATABASESに書く (仮にfdbと呼ぶ) 2.DatabaseRouterを自作して fdb への migratonは許可しないようにする。 3.fdbのテーブル群に対して models.py および Model を書く inspecdbというコマンドを使えばモデルを自動生成してくれるかもしれません https://docs.djangoproject.com/en/1.11/howto/legacy-databases/#auto-generate-the-models 4. Django Adminで モデルの管理画面を生成する https://docs.djangoproject.com/en/1.11/ref/contrib/admin/ ```