【python】DjangoでSQLServerへ接続する手順を図解で初心者にもわかりやすく解説【ライブラリ】

header17

まず初めに

みなさん、こんにちは。はねすけと申します。

今回は「DjangoでSQL Serverに接続する方法」についてお話ししたいと思います。

経験の浅い方にも理解しやすいよう、順をおってお話していければと思いますので、
ぜひ参考にしていただければと思います♪

それでは早速行ってみましょう!

こんな方はぜひ読んでみてくださいね

・Djangoを使ったpython開発を行いたい

・DjangoにおいてデータベースにSQL Serverを使用したい

・理解しやすいようにじっくりと順を追って実装方法を知りたい

基本情報の整理

pythonとは?

まずは情報整理のために、各キーワードの整理から行っていきます。
そんなの今さら必要ないという方は次の章まで飛んでいただければ幸いです(笑)

最初は「python」からですね。
pythonとはざっくりというと、「クリーンで読みやすい構文が特徴な汎用的なプログラミング言語」です。
近年では機械学習の需要の高まりにより、コミュニティも活発で世界的にも人気なプログラミング言語の1つですね。
非常にシンプルで理解しやすい構文で書くことができたり、多種多様なライブラリ機能がすでに存在しているのも開発者にとっては有難いですね。

まだ使ったことがないという方は、まずはぜひ公式サイトよりpythonをインストールしてその使いやすさ・面白さを体験してみてくださいね。

Djangoとは?

Djangoとはpythonにおけるフルスタックフレームワークの1つです。
ちなみにフレームワークというのはシステム開発を円滑に進めるための構成や枠組みのことを意味します。
フルスタックというのは、簡単に言うと機能が豊富ということです。
Django1つでデータベース接続や認証機能(ログインなど)を簡単に実装することができたりと、機能がモリモリになっているフレームワークということですね。(その分サイズが大きく速度が遅めだったりするのですが…)

Django以外にもpythonには様々なフレームワークが存在していますので、目的に合わせたフレームワークを選択すると良いでしょう。
様々なケースに対応できるという意味で、最初にDjangoを選択するというのももちろん有効な選択になります。

Command Line
pip install Django

PCのコマンドライン上で、上記のようなコマンドを実行することで簡単にインストールして使用することができますので、ぜひ試してみてくださいね。
詳細な実行手順については別の記事で紹介していますので、そちらも参考にしていただければと思います。

header9【初心者必見】Djangoって一体何?実行の手順・理解のコツを図解でわかりやすく解説します♪【Python】

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の場合の手順を記載しますので、参考にしてください。

Command Line
pip install django-mssql-backend
tezhun1-1
①キーボードで「windowsキー+Rキー」を押して、「ファイル名を指定して実行」ウィンドウを開いてください。
②「名前」欄に「cmd」と入力してください。
tezhun1-2
③上記のようなCommand Line画面が開きますので、上記のコマンド「pip install django-mssql-backend」を入力・実行してください。

手順② 事前にデータベースを用意しておきましょう

次にDjangoを接続させたいデータベースをSQL Server上に作成しましょう。
次の手順で設定ファイルに記載する必要がある内容であるため、こちらについては事前の作成が必要になります。

作成の方法はいくつかありますが、SQL ServerをGUI(グラフィカル・ユーザー・インターフェース)ベースで操作できるSSMS(SQL Server Management Studio)を使用して作成するのが一番簡単でしょう。
SQL Serverを使っている方であれば基本的に使ったことがあると思います。

まだインストールしていないという方は、公式サイトからダウンロードしてみてください。
こちらもSQL Server自体と同様に無償でも使用できますので、ご安心ください。

まずは以下のような手順でSSMSを起動しましょう。

tezhun2
①画面下部の「検索」欄をクリックしましょう。
tezhun2-1
②もしくはWindowsボタンを押して、検索画面に遷移してもよいですね。
Windowsのバージョンによって多少変わるとは思いますが、上画像のように「アプリ、設定、ドキュメントの検索」となっている欄をクリックしましょう。
tezhun2-2
③「検索」欄に「ssms」と入力しましょう。
 すると上画像のようなSSMSのアイコンが表示されるので、それをクリックしましょう。
tezhun2-3
④アイコンをクリックするとSSMSが起動し、上画像のようにログイン画面が表示されますので、ご自身が設定したログイン情報を入力してください。
最後に「Connect」をクリックすることで、SSMSへの接続が完了し、SQL Serverへの操作が可能になります。

併せて、以下にSSMSを使用した簡単なデータベース作成手順を掲載しますので、参考にしていただいてデータベースを作成してください。

ssms1
①「Databases」を右クリックしてください。
ssms2
②「New Databae…」を選択してください。
ssms3
③「Databese name」の項目に作成したいデータベース名を任意に設定してください。
④それ以外の項目はデフォルトで問題ありませんのでOKボタンを押してください。
ssms4
⑤リロードボタンを押して、情報を再読み込みしましょう。
⑥作成したデータベース名が表示されていると思いますので、確認してください。

手順③ データベース設定情報を書き換えましょう

次にデータベースの設定情報を書き換えていきましょう。
Djangoにおけるデータベースの設定情報は「settings.py」ファイルに記載されます。
以下のコマンドでDjangoプロジェクトを作成すると「settings.py」ファイルも自動で生成されますので、そこに記載していきます。

Command Line
django-admin startproject プロジェクト名 .

以下に、プロジェクト名が「testApp」の場合の例を掲載しますので、参考にしてください。

tezhun3
①プロジェクトを作成したいディレクトリにてCommand Lineを起動しましょう。
 上記のようにプロジェクトを作成したいディレクトのパス表示部分をクリックしてください。
tezhun3-1
②クリックしたら「cmd」と入力・実行してください。
tezhun3-2
③上記のようにディレクトリパスでのCommand Lineが起動します。
tezhun3-3
④「testApp」というプロジェクト作成のために「django-admin startproject testApp .」コマンドを実行します。
tezhun3-4
⑤プロジェクトのディレクトリ画面を再度確認しましょう。上画像のようにプロジェクト関連ファイルが生成されています。
「testApp」フォルダをクリックしてください。 
tezhun3-5
⑥「testApp」フォルダに移動すると、「settings.py」ファイルの存在を確認できますね。

書き換えるのは「settings.py」ファイル内のデフォルトで以下のような記載になっている箇所です。

settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

どういう内容かというと、データベースにsqlite3というものを使用するという設定です。
これをSQL Server接続用となるよう、以下のように書き換えてください。

settings.py
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上記手順の②で作成したデータベース名を指定してください。
USERSQL Serverに接続可能なユーザー名を指定してください。
※SSMSにログインする際のログインユーザー名です。
PASSWORDSQL Serverに接続可能なパスワードを指定してください。
※SSMSにログインする際のパスワードです。
HOST接続する環境に合わせて指定してください。
※上記は、ローカル環境のSQLExpressというホストに接続するための記載です。
PORTポートを限定したい場合に指定してください。
※設定していなくても問題ないです。
OPTIONS上記の通り、特に変更は不要です。

手順④ 起動を確認しましょう

ここまで出来たら問題なく接続できているかを確認していきましょう。
まずはSQL Serverに接続して、Djangoの起動に必要な情報をデータベースに作成しましょう。

Command Line
python manage.py migrate
tezhun4-1
上画像のように、手順③で起動したCommand Lineに上記のコマンドを入力・実行しましょう。

特にエラーが発生しなければ問題ありません。
何かしらエラーが発生した場合には次の章を参考にトラブルシューティングしてみてください。

後はサーバーを起動するだけです。
CommandLine上で以下のコマンドを実行した状態で、ブラウザからアクセスしてみてください。
ローカル環境であれば「http://127.0.0.1:8000/」のアドレスで接続が可能です。

Command Line
python manage.py runserver
tezhun4-2
上記のように、末尾に「Quit the server with CTRL-BREAK.」と表記されていれば起動成功です。
※サーバを停止するには「Ctrlキー+Cキー」を実行してください。

ブラウザで以下のようなページが表示されれば、正常にSQL Serverに接続し、必要な情報を参照できています。
おめでとうございます!あとは目的に応じて開発を進めていただくことが可能です。

tezhun4-3

トラブルシューティングまとめ

各種バージョンにご注意

最後にライブラリ「django-mssql-backend」を使用する際に考えられるエラー回避のための注意点をいくつかご紹介しておきます。

1つめは「django-mssql-backend」が対応しているDjangoおよびSQL Serverのバージョンについてです。
上記に掲載しているライブラリページを見ていただければわかりますが、以下のように記載されています。

  • Supports Django 2.2, 3.0
  • Supports Microsoft SQL Server 2008/2008R2, 2012, 2014, 2016, 2017, 2019
https://github.com/ESSolutions/django-mssql-backend

簡単に言うと、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」が存在しています。
これらは全く同じ記載方法で動作するため、インストールされていると不具合を引き起こしてしまう可能性があります。
以下のコマンドでそれぞれアンインストールしておくのが一番安全でしょう。

Command Line
pip uninstall django-pyodbc-azure
Command Line
pip uninstall django-pyodbc-azure-2019

まとめ

いかがだったでしょうか?

本日お伝えしたかった内容を簡単にまとめると以下のようになります。

ぜひ参考にしていただいて開発ライフを円滑に進めてくださいね。

それでは次の記事でまたお会いしましょう♪

本日のまとめ

・DjangoでのSQL Serverの接続には「django-mssql-backend」ライブラリを使用すると良いでしょう

・使用できるライブラリバージョンが限定されているので注意しましょう

2 COMMENTS

たなか

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/

返信する
はねすけ

>たなかさん
コメントありがとうございます。
最新の情報提供有難いですね。
いただいた情報に関してこちらでも試してみようと思います。
またぜひ更新版の記事についても見てみてくださいね。

返信する

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です