まず初めに
みなさん、こんにちは。はねすけと申します。
今回は「DjangoでSQL Serverに接続する方法」についてお話ししたいと思います。
経験の浅い方にも理解しやすいよう、順をおってお話していければと思いますので、
ぜひ参考にしていただければと思います♪
それでは早速行ってみましょう!
・Djangoを使ったpython開発を行いたい
・DjangoにおいてデータベースにSQL Serverを使用したい
・理解しやすいようにじっくりと順を追って実装方法を知りたい
基本情報の整理
pythonとは?
まずは情報整理のために、各キーワードの整理から行っていきます。
そんなの今さら必要ないという方は次の章まで飛んでいただければ幸いです(笑)
最初は「python」からですね。
pythonとはざっくりというと、「クリーンで読みやすい構文が特徴な汎用的なプログラミング言語」です。
近年では機械学習の需要の高まりにより、コミュニティも活発で世界的にも人気なプログラミング言語の1つですね。
非常にシンプルで理解しやすい構文で書くことができたり、多種多様なライブラリ機能がすでに存在しているのも開発者にとっては有難いですね。
まだ使ったことがないという方は、まずはぜひ公式サイトよりpythonをインストールしてその使いやすさ・面白さを体験してみてくださいね。
Djangoとは?
Djangoとはpythonにおけるフルスタックフレームワークの1つです。
ちなみにフレームワークというのはシステム開発を円滑に進めるための構成や枠組みのことを意味します。
フルスタックというのは、簡単に言うと機能が豊富ということです。
Django1つでデータベース接続や認証機能(ログインなど)を簡単に実装することができたりと、機能がモリモリになっているフレームワークということですね。(その分サイズが大きく速度が遅めだったりするのですが…)
Django以外にもpythonには様々なフレームワークが存在していますので、目的に合わせたフレームワークを選択すると良いでしょう。
様々なケースに対応できるという意味で、最初にDjangoを選択するというのももちろん有効な選択になります。
pip install Django
PCのコマンドライン上で、上記のようなコマンドを実行することで簡単にインストールして使用することができますので、ぜひ試してみてくださいね。
詳細な実行手順については別の記事で紹介していますので、そちらも参考にしていただければと思います。
SQL Serverとは?
SQL Server(エスキューエル サーバー)は、Microsoftによって開発されたリレーショナルデータベース管理システム(RDBMS)です。
無償で使用できる個人向けのものから、企業向けの大規模製品版まで様々なエディションが存在し、企業や組織における多様なユースケースで用いられているデータベースです。
Djangoではデフォルトで「sqlite」というデータベースを使用できるようになっています。
特にこだわりがなければsqliteをそのまま使ってもらっても一通りの開発は問題なく進められると思います。
しかしWindows環境での別開発でSQL Serverを使用されている方にとっては、SQL Serverを使用した方が何かと便利かもしれませんね。
公式サイトから無償版を簡単にダウンロードすることができますので、興味がある方はぜひ試してみてくださいね。
ライブラリ「django-mssql-backend」を使用しよう
手順① ライブラリのインストール
それでは今回のテーマであるDjangoでのSQL Server接続の手順に入っていきましょう。
結論からお伝えしますと、接続するためには「django-mssql-backend」というライブラリを使用します。
Django公式が提供しているライブラリではないのですが、準公式のような扱いを受けているライブラリです。
継続的な更新が行われており、今後の保守性の面からも最も有効なライブラリではないかと思われます。
インストールは非常に簡単で、ご自身の開発環境のターミナル上で以下のコマンドを実行するだけです。
まずはこちらを行ってください。
※以下に端末がWindowsの場合の手順を記載しますので、参考にしてください。
pip install django-mssql-backend
手順② 事前にデータベースを用意しておきましょう
次にDjangoを接続させたいデータベースをSQL Server上に作成しましょう。
次の手順で設定ファイルに記載する必要がある内容であるため、こちらについては事前の作成が必要になります。
作成の方法はいくつかありますが、SQL ServerをGUI(グラフィカル・ユーザー・インターフェース)ベースで操作できるSSMS(SQL Server Management Studio)を使用して作成するのが一番簡単でしょう。
SQL Serverを使っている方であれば基本的に使ったことがあると思います。
まだインストールしていないという方は、公式サイトからダウンロードしてみてください。
こちらもSQL Server自体と同様に無償でも使用できますので、ご安心ください。
まずは以下のような手順でSSMSを起動しましょう。
併せて、以下にSSMSを使用した簡単なデータベース作成手順を掲載しますので、参考にしていただいてデータベースを作成してください。
手順③ データベース設定情報を書き換えましょう
次にデータベースの設定情報を書き換えていきましょう。
Djangoにおけるデータベースの設定情報は「settings.py」ファイルに記載されます。
以下のコマンドでDjangoプロジェクトを作成すると「settings.py」ファイルも自動で生成されますので、そこに記載していきます。
django-admin startproject プロジェクト名 .
以下に、プロジェクト名が「testApp」の場合の例を掲載しますので、参考にしてください。
書き換えるのは「settings.py」ファイル内のデフォルトで以下のような記載になっている箇所です。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
どういう内容かというと、データベースにsqlite3というものを使用するという設定です。
これをSQL Server接続用となるよう、以下のように書き換えてください。
DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'test_db',
'USER': 'python',
'PASSWORD': 'password',
'HOST': 'localhost\SQLExpress',
'PORT': '',
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server',
},
}
}
各項目の設定内容は以下の通りです。
ENGIN | 上記の通り、特に変更は不要です。 |
NAME | 上記手順の②で作成したデータベース名を指定してください。 |
USER | SQL Serverに接続可能なユーザー名を指定してください。 ※SSMSにログインする際のログインユーザー名です。 |
PASSWORD | SQL Serverに接続可能なパスワードを指定してください。 ※SSMSにログインする際のパスワードです。 |
HOST | 接続する環境に合わせて指定してください。 ※上記は、ローカル環境のSQLExpressというホストに接続するための記載です。 |
PORT | ポートを限定したい場合に指定してください。 ※設定していなくても問題ないです。 |
OPTIONS | 上記の通り、特に変更は不要です。 |
手順④ 起動を確認しましょう
ここまで出来たら問題なく接続できているかを確認していきましょう。
まずはSQL Serverに接続して、Djangoの起動に必要な情報をデータベースに作成しましょう。
python manage.py migrate
特にエラーが発生しなければ問題ありません。
何かしらエラーが発生した場合には次の章を参考にトラブルシューティングしてみてください。
後はサーバーを起動するだけです。
CommandLine上で以下のコマンドを実行した状態で、ブラウザからアクセスしてみてください。
ローカル環境であれば「http://127.0.0.1:8000/」のアドレスで接続が可能です。
python manage.py runserver
ブラウザで以下のようなページが表示されれば、正常にSQL Serverに接続し、必要な情報を参照できています。
おめでとうございます!あとは目的に応じて開発を進めていただくことが可能です。
トラブルシューティングまとめ
各種バージョンにご注意
最後にライブラリ「django-mssql-backend」を使用する際に考えられるエラー回避のための注意点をいくつかご紹介しておきます。
1つめは「django-mssql-backend」が対応しているDjangoおよびSQL Serverのバージョンについてです。
上記に掲載しているライブラリページを見ていただければわかりますが、以下のように記載されています。
https://github.com/ESSolutions/django-mssql-backend
- Supports Django 2.2, 3.0
- Supports Microsoft SQL Server 2008/2008R2, 2012, 2014, 2016, 2017, 2019
簡単に言うと、Djangoのバージョンは「2.0および3.0」が対応していて、SQL Serverのバージョンに関しては「2008/2008R2, 2012, 2014, 2016, 2017, 2019」が対応しているという内容です。
それ以外のバージョンを使用していると、おそらくバージョンに対応していないというエラーが発生してしまいます。
ともに現時点からすると少し前のバージョンのものになりますが、仕方ないですね…
今後より新しいバージョンに対応したライブラリがリリースされるのに期待しましょう。
不要なライブラリの存在にご注意
次に不要なライブラリの存在についてです。
「django-mssql-backend」には、その前身となる2種類のライブラリ「django-pyodbc-azure」「django-pyodbc-azure-2019」が存在しています。
これらは全く同じ記載方法で動作するため、インストールされていると不具合を引き起こしてしまう可能性があります。
以下のコマンドでそれぞれアンインストールしておくのが一番安全でしょう。
pip uninstall django-pyodbc-azure
pip uninstall django-pyodbc-azure-2019
まとめ
いかがだったでしょうか?
本日お伝えしたかった内容を簡単にまとめると以下のようになります。
ぜひ参考にしていただいて開発ライフを円滑に進めてくださいね。
それでは次の記事でまたお会いしましょう♪
・DjangoでのSQL Serverの接続には「django-mssql-backend」ライブラリを使用すると良いでしょう
・使用できるライブラリバージョンが限定されているので注意しましょう
django-mssql-backendを紹介されていますが、こちらは最新版2020年4月となっており、3年も前の古いライブラリです。
django-mssql-backendをforkして作られたmssql-djangoを使うほうが適切かと思います。
mssql-djangoの最新版は2023年6月でDjango 4.2に対応しています。
https://github.com/microsoft/mssql-django
mssql-djangoはURLを見て分かる通りmicrosoftが公開していますし、microsoftのホームページでも紹介されているライブラリなので安心感があります。
https://learn.microsoft.com/en-us/samples/azure-samples/mssql-django-samples/mssql-django-samples/
>たなかさん
コメントありがとうございます。
最新の情報提供有難いですね。
いただいた情報に関してこちらでも試してみようと思います。
またぜひ更新版の記事についても見てみてくださいね。