SQLServerをデータベースに使うことは普通に可能
DjangoのデフォルトでサポートしているデータベースサーバはPostgres・MySQL・Oracleの3つです。Djangoを始めた当初SQL Serverに接続する方法を探していたのですが、Googleで「Django SQLServer」と検索しても古い情報しか出なかったり(django-mssql等、更新の止まった古いパッケージの情報は出る)、terataiにも「できないので諦めろ」という趣旨の回答があったりで、自分もできないもんだと思い込んでいましたが、最近になって現在も継続更新中の接続用パッケージの存在を知りました。
django-pyodbc-azure について
DjangoからSQLServer への接続用ライブラリです。
Github : https://github.com/michiya/django-pyodbc-azure
Microsoftが公式にサポートしているPython用SQLServer接続ライブラリ「pyodbc」を使ってODBC経由で接続します。
Python SQL ドライバー - pyodbc:
https://docs.microsoft.com/ja-jp/sql/connect/python/pyodbc/python-sql-driver-pyodbc?view=sql-server-2017
DjangoやMicrosoftの公式サポートではありませんが、atmarkitの記事を見る限りでは準公式的な扱いのように思えます。過去にMicrosoftで公開されていたAzureへのDjangoのデプロイ方法の記事にもこのパッケージが使われています(現在は削除されてflaskの記事に置き換えられている)。
Githubに残っている記事がこれです。
Qiitaにも利用している記事がありますね。
- [Azure App Serviceにpipを使用できないパッケージをインストールする]
(https://qiita.com/YuichiNukiyama/items/ad125213c44b4100764b)
Githubのスター数も多いので、今後の継続開発を信じて使ってみたいと思います。
django-pyodbc-azure の使い方
pip install django-pyodbc-azure
でインストール後、settings.py
のDATABASE
を編集します。
settings.py 例
DATABASES = {
'default': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'mydb',
'USER': 'user@myserver',
'PASSWORD': 'password',
'HOST': 'myserver.database.windows.net',
'PORT': '',
'OPTIONS': {
'driver': 'ODBC Driver 13 for SQL Server',
},
},
}
driverはデフォルトで「ODBC Driver 13 for SQL Server」を使うので、無ければインストールします。諸事情でインストールできない場合でも既にインストールされている過去バージョンを文字列で指定すれば接続することができます。
HOST
はAzureならserver_name.database.windows.net
、オンプレミスのインスタンスならserver\instance
です。例えばローカルマシンのExpress Editionに接続するならlocalhost\SQLEXPRESS
となります。
※ただしExpress Editionに接続するには色々と設定が必要です。
参考:SQL Server Express にリモート接続
とりあえずローカルマシンとAzureのDBインスタンスに接続して試してみました。マイグレーションでエラーも出ず、問題なく動いています。
DjangoのフィールドとSQLServerのカラム型との対応はこちらのエントリにまとめまています。