質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Django

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

Python

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

Q&A

解決済

2回答

1681閲覧

Djangoで外部DBのマスタメンテナンス画面を作成したい

hnzwjun

総合スコア25

Django

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

Python

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

0グッド

1クリップ

投稿2017/11/07 14:35

Djangoで外部のデータベース(今回はSQLServer)に接続してデータのやりとりをするアプリを開発しています。

外部データベースへの接続、及び、SQL実行には[pyodbc]を使用しており、SQLの実行やレコードセットの取得等は無事に出来ています。
settings.pyのデータベース接続先は何も変更しておらず、未だ「sqlite」のままです。


前置きが長くなりましたが、今回は、
ユーザが外部データベース内のテーブルを直接編集出来るマスタメンテの画面を作成ことが目的です。
全レコードを表示して好きな箇所を編集し、保存をするとテーブル自体を更新される(.Netのデータ・バインディングの様なイメージ)を作れたら理想かと思っています。

外部データベースに既に作成されているテーブルをModelとしてDjango内に反映出来ればもしかして・・・?とも考えてはいるのですが反映のさせかたが分からず試せていない状態です。

テーブル自体の更新が不可能であればフォームのPost処理等で変更があった行のみをループして一件づつ更新していくしかないのかなと思っています。


Djangoで外部データベースのマスタメンテナンス画面(またはそれに近いもの)を作成したことある方いましたら是非おすすめの方法を教えては頂けないでしょうか

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

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

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

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

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

guest

回答2

0

ベストアンサー

1.既にDjangoとは関係ないDBが存在する 2.スキーマ管理(migration)などはしないが、DjangoのORMなどでデータは操作はしたい。

みたいなイメージでしょうか? Django では複数のデータベースを扱う時に DatabaseRouterという機能を使います。

https://docs.djangoproject.com/en/1.11/topics/db/multi-db/

その時に、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/

投稿2017/11/07 15:20

tell_k

総合スコア2120

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

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

hnzwjun

2017/11/08 00:40

イメージはそれで合っています。 現在使用している「SQLServer」だとsettings.pyに接続情報を記述すること自体が難しい様なので「PostgreSQL」に移行した上で教えて頂いた方法を試してみたいと思います。 外部DBがPostgreSQLの場合は教えて頂いた方法で
guest

0

PostgreSQLならmodels.pyに
既存テーブルが生成されるようなモデルを書いておけば
しれっと操作できました。
(フィールドは必要なところだけで省いてもOK)
AdminSiteも使えました。
すべての機能を試したわけではないですが。

SQLServerの場合、標準でがサポートされてませんが、
サードパーティ製のドライバで使用できるようなことも
ドキュメントにあります。
3rd-party
Django-mssql
バックエンドに設定さえできれば、
おそらく基本的な機能については動きそうな気がします。
ただ、邪道なのでトラブったら自分で解決する必要があります。

投稿2017/11/07 15:17

kokardy

総合スコア781

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

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

hnzwjun

2017/11/08 00:34

「SQLServer」ではなく「PostgreSQL」を使用した方が良いのかもしれないですね。 Django-mssqlは一応試してみたことはあったのですが、Djangoの最新バージョンに対応していない(Djangoは現在v1.11を使用していますが、ドキュメントにはDjnago v1.8のみをサポートと記述されているので当然?)のか上手く使うことが出来ませんでした。 トラブル発生時に自分で解決することもDjangoの仕様を把握出来ていない現状では難しいと思いますので、DBの移行も考えてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問