1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

マイクロソフト Access を利用した、Djangoの学習入門(インストール編)

1
Last updated at Posted at 2026-01-08

この記事は、初心者が読まれることを想定して書いています。
この説明は当たり前の知識で無駄では?と感じる部分がありますが、お許しください。

AccessデスクトップアプリのWeb変換方法についての概要

上記の記事で紹介しましたが、Accessで開発された デスクトップ データベース アプリケーション を、完全な Webアプリケーション に変換する際には、Webサーバー側で使われる技術としてDjangoを紹介しました。しかしWindowsのAccess開発者の方々にとっては、まだDjangoは、馴染みがないと思われます。そこでマイクロソフト Access を利用して Django から Webアプリケーションを開発するための入門記事を書くことにしました。

この記事では、Django 6.0 から、Accessのデータベースファイル(.accdbファイル)を操作しております。

1.はじめに

Django

Django は、Python言語から利用できる、フルスタックの Web アプリケーション フレームワーク です。正式に記述するとこのような難しい表現になりますが、簡単に言えば、

「Djangoは、Webサーバーで動かすプログラムを開発するためのライブラリ」

と言えるものです。その開発言語が、Python言語です。

Chrome や Edge などのブラウザでページを表示して、そのページにあるボタンをクリックすると、ブラウザからWebサーバー側に、「ボタンが押された」とhttps通信を使って、通知されます。
Webサーバーでは、その応答動作をプログラムによって作成し、その結果をパソコン側に返答します。
このWebサーバー側の応答動作部分の処理を、Python言語とDjangoを使ってプログラムを作ります。
「フルスタック」とは、どんな処理でも実現できる、プログラマが通常考えていることなら、何でも作れますよ!といったイメージを表しています。

もちろん、データベース操作も、Djangoの中でその使い方が決められています。

ブラウザに表示されたテキストボックスに、顧客番号を入力し、ボタンをクリック。
Webサーバー側で、htmlページで入力された顧客番号を取り出して、データベースを検索して、その顧客情報を取り出し、その情報を編集して応答結果としてブラウザ側に返します。ブラウザではその顧客番号に対応した顧客情報が表示される、今では当たり前のこのような処理が、Python言語とDjangoによって作成できます。

2.Djangoに対応したデータベース

 Djangoを開発している djangoproject では、公式に対応したデータベースとして、

公式対応データベース名
PostgreSQL
MariaDB
MySQL
Oracle
SQLite

を上げています。

公式対応のデータベース

これは、Djangoからデータベースを使うときに必要となる、データベース接続プログラムの提供を、djangoproject が開発して提供を行っているので、そのデータベースの名前が記載されています。

この表にはマイクロソフト社のSQLServerデータベースシステムが、載っていません。SQLServerは、Djangoで使えないのか?と考えてしまいますが、そんなことはありません。
マイクロソフト社とそれに協力した人達が共同で、SQL Serverに対応したデータベース接続プログラムを開発しています。

mssql-django

このプログラムを使えば、Djangoから、SQLServerを使うことができるようになります。

なお、WindowsやAzure、LinuxやmacOSなどのあらゆる環境下で使用できる SQL Server用のマイクロソフト社の純正の接続ドライバである、

mssql-python

というパッケージ製品がありますが、こちらは、Djangoでは使いません。間違えることがありますので注意が必要です。

このように、Djangoの 公式対応データベースは、データベース接続パッケージを探さなくてもすぐに使用できるという利点があります。しかしそれ以外のデータベースも接続パッケージを導入することで、Djangoから使えるようになることが、わかると思います。お使いになるデータベースに対応した、データベース接続パッケージを調べてください。

3.マイクロソフト Access データベースは、Djangoに対応しているか?

まさに、直球的な質問になりますが、その答えは「いいえ」(対応しない)と、なります。
Accessがどんなに進化しても、致命的な課題があります。それは、Djangoで利用可能なデータベースは、「トランザクション機能」の実装が求められます。
この「トランザクション機能」とは、簡単に説明をすれば、データベースのレコードのデータを修正した後で、その修正は間違いだったから取り消しを行って元の状態に戻す機能のことと言えます。

エクセルのセルを使って表現すれば、
(1)セルに、今、文字Aが表示されている
(2)その文字を、数字の1に書き換えた。
(3)書き換えた後に、入力間違いに気が付いた
(4)間違いを訂正するために、「元に戻す」ボタンを押した。
(5)セルの表示が、元のAの表示に戻った。
言わば、このような元に戻す機能とも言えます。

マイクロソフト Access では、DAOやADOなどのデータベースオブジェクトを利用したVBAプログラミングの世界で、トランザクション機能が一部提供されますが、肝心のSQL文の世界では使用できません。Djangoでは、まさに、このSQL文におけるトランザクション機能が必要になります。

ここまで Accessが進化をすれば!という夢の話は置いておいて、自分1人でDjangoのプログラミングの学習をするために使うデータベースに、トランザクション機能が必要になるのかな?とレベルダウンを想像してください。
学習目的なら、トランザクション機能はいらないんじゃね?と、思えませんか?
もちろん、トランザクション機能のロールバックを勉強したい!という要求は無理ですが。

ということで、Djangoを学習するために、Accessで使用できるデータベース接続ドライバを探してみましょう。

4.Accessのデータベース接続ドライバ

pypi.org

Python言語で利用できる便利なプログラム(パッケージと言う)は、pypi.orgサイトで検索し、該当したものをpipコマンドを使ってインストールを行います。

検索条件に、Django と入力すれば、Djangoに関係するパッケージが多く表示されます。

さて、先人が開発したマイクロソフト Access の接続ドライバは、直接そのソースプログラムを自分の所に保存して使う形式になっていましたので、pypiで見つけることはできません。
幸い今でもそのプログラムをgithubで見ることができます。

EBNull/django-pyodbc-access

今から14年前に開発された古いもので、Python言語やDjango、そしてAccessもその当時のものに対応しています。ですから今の環境では、その動作は望めません。

EBNullさんが開発したプログラムを、Python言語のバージョン3に対応させたものが、18fさんのライブラリになります。

これも最近のDjangoでは実行できませんでした。

そこで、この18fさんのプログラムを元に、現在の環境で動くようにしたのが、私のプログラムになります。

django-msaccess

pypi.org で、
django msaccess
と検索して(名前そのものズバリですが)、
django-msaccess
と表示されたものが、Accessの接続ドライバになります。これを使って、Djangoの学習を行います。
のちほど、インストールの解説をします。

5.マイクロソフト Access は、インストール済みですか?

 Djangoを学習するためには、Access が必要です。インストールされていますか?

 この記事はAccess技術者向けに書いていますから、もちろんインストール済みだと思いますが、中には「わからない」と回答もあるかもしれません。そこでインストール済みかどうか調べてみましょう。
 なおここで説明する調査方法は、あとの項目で使うための予備知識になりますので、しっかりと押さえて下さい。

5.1 Windowsのビット数の把握を行う(32または64、どっち?)

 まず、お使いになっているWindowsのビット数は何でしょうか?
Windows11なら、32ビット版は存在しないので64ビットとなります。一方、Windows10では、32ビット版と64ビット版がありますので、どちらのWindowsを使用しているかを把握します。
Windowsが32ビット版であれば、何も迷うことはなく、以下のいろいろなソフトウェアのインストール作業はすべて32ビット版になります。
一方、Windows11のような64ビット環境では、64ビット対応のソフトウェアだけではなく、32ビット版のソフトウェアもインストールできるので ** 注意 ** が必要となります。

5.2 Windows11では、VBScript を有効化する

 マイクロソフト社の方針で、VBScript は 2027年頃にWindowsから削除される予定です。このためできる限りVBScriptは使わない方針が良いのですが、手軽に使用できるため、本記事でも使用したことをご了解ください。
 Windows11では、VBScriptを「オンデマンド機能(FOD)」にして、その有効や無効の設定ができるようになりました。もしかすると、無効にしているパソコンもあるかもしれません。Windows11では、有効化をお願いします。

5.3 Accessが入っているか?

 さて、コマンドプロンプトを起動して、作業用ディレクトリに移動してください。作業用ディレクトリが無ければ、その作成をお願いします。

mkdir C:\work
cd /d C:\work

エディタ(メモ帳でも可)で次のプログラムを入力して保存します。

notepad CreateAccdb.vbs

CreateAccdb.vbs
Dim Cat  
Dim DBPath  
DBPath = ".\MyNewDatabase.accdb"  
Set Cat = CreateObject("ADOX.Catalog")  
Cat.Create "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBPath & ";"  
Set Cat = Nothing  

DBPath変数には、Accessのデータベースファイル名(拡張子.accdb)のパスを登録します。このパス文字列の中に、日本語文字列(漢字など)を使用した場合(パスの途中に存在するディレクトリ名に日本語文字列が含まれている場合も含む)は、このファイルを保存するときの文字コードを、ANSIにしてください。メモ帳でテキストファイルを作成したときの文字コードは、UTF-8になっていると思います。

このVBScriptは、製品版Accessや、Access ランタイム実行環境をインストールしたときに登録されるADOXオブジェクトを使って、何も入っていない空っぽのデータベースファイルを作成するプログラムです。
もし、このVBScriptが正常に動いて、DBPath変数に登録したファイルが作成できれば、製品版AccessまたはAccess ランタイム実行環境がインストールされていると判断できるわけです。

ここで、製品版Accessと、Accessランタイム実行環境の2つを取り上げたのは、理由があります。
実は製品版Accessがインストールされていなくても、なんらかの理由でAccessランタイム実行環境をインストールしているパソコンが存在するからです。

Djangoを学習するときは、製品版Accessがあるとその操作面で便利です。ただ必須ではありません。
Accessランタイム実行環境でも、Djangoの学習を進めることはできます。

さて上記のプログラムを実行するときに、コマンドプロンプト上から
cscript.exe CreateAccdb.vbs
と入力します(.exeの入力は実際は不要です)。

32ビット版Windowsでこの命令を実行した場合は、何も考慮することはありません。このcscriptコマンドは32ビット版で、32ビットのAccessによってインストールされたADOXオブジェクトを探しに行って、オブジェクトが見つかれば空っぽのデータベースファイルの作成が行われます。もしパスに日本語文字列を使用し、VBSプログラムを間違ってUTF-8文字コードで保存していれば、エラーが発生します。製品版AccessやAccess ランタイム実行環境が入っていなければ、ADOXオブジェクトが見つかりませんので、
Provider: クラスが登録されていません
というような内容のエラーが表示されます。

64ビット版Windowsでは、64ビットソフトウェアのほかに、32ビット版のソフトウェアがインストールできますので、どちらのビット数でインストールされているのかを調べる必要があります。
そこでコマンドを入力するときは、フルパスで入力します。

64ビットでは、まず最初に

C:\Windows\System32\cscript.exe CreateAccdb.vbs

と実行します。このSystem32フォルダの中のコマンドは、すべて64ビット版です。64ビット版のAccessがインストールされているかを調査します。もちろんCreateAccdb.vbsファイルの文字コードは ANSI にしてください。

このコマンドの実行結果で、

C:\Work\CreateAccdb.vbs(5, 1) Provider: クラスが登録されていません  

のような、クラスが登録されていないというエラーが表示されたときは、64ビット版のAccessはインストールされていないことがわかります。

もしインストールされていなければ、次は32ビット版を探します。実行するcscript.exeコマンドのパスが異なります。

C:\Windows\SysWOW64\cscript.exe CreateAccdb.vbs

と実行します。
このSysWOW64フォルダの中は、32ビット版ソフトウェアが収録されています。実行して何もエラーが表示されなかったら、DBPath変数に登録したファイル名で、空っぽのAccessデータベースファイルが作成されていると思います。

このように64ビット版Windowsでは同じコマンドでも、64ビット版だけではなく32ビット版にも組み込まれているので、片方が失敗しても、もう片方で検査をする必要があります。
64ビットWindowsを使っているパソコンの中に、32ビット版のAccessランタイム実行環境をインストールしている場合は注意が必要です。

32ビット版の調査と、64ビット版の調査の両方の結果で、空のAccessのデータベースファイルが作成できなければ、製品版AccessやAccessランタイム実行環境はインストールされていないと断定します。

5.4 Accessランタイム環境のインストール

 製品版Accessが存在しない時は、Accessランタイム実行環境を入れることで、Djangoの学習をすることができます。
 Accessランタイム実行環境をインストールする前に、すでに入っているワードやエクセルのビット数は何でしょうか?
32ビット版のワードが入っているのでしょうか?それとも64ビット版のエクセルでしょうか?
オフィス製品のソフトウェアのビット数は揃えることになっていますので、32ビット版のワードがインストールされていれば、32ビット版のAccessランタイム環境を入れることになります。64ビット版のエクセルが入っていれば64ビット版のAccessランタイム環境になります。

 オフィス製品が入っていなければ、Accessランタイム環境のビット数は自分で決めます。学習用なので、どちらでも構いません。

 Accessランタイム環境は、マイクロソフト社のページからダウンロードします。

Microsoft 365 Access Runtime をダウンロードしてインストールする

必要な言語を「日本語」にしてダウンロードします。
OfficeSetup.exeというファイルがダウンロードできますので、そのファイルを実行します。

なお、Office2019までの古いOffice製品のサポートは終了したので、古いOffice(Excelのバージョンが2016など)がインストールされている環境でAccessランタイム環境のインストールは、上記ページからダウンロードしたファイルではなく、別のファイルとなります。

Microsoft Access 2016 Runtime

Microsoft Access Database Engine 2016 Redistributable

英語版のダウンロードになります。

6.Pythonコマンドのインストール

 Windowsのコマンドプロンプトから python と入力すると、Windowsストア画面が表示されることがあります。この画面からPythonコマンドをダウンロードしてインストールを行うことができるようになっています。

Windowsストア画面の表示.png

 Windowsの中に、次のファイルがあります。

"C:\Users\ログインユーザ名\AppData\Local\Microsoft\WindowsApps\python.exe"
"C:\Users\ログインユーザ名\AppData\Local\Microsoft\WindowsApps\python3.exe"

環境変数LOCALAPPDATAを使うと、

%LOCALAPPDATA%\Microsoft\WindowsApps\python.exe
%LOCALAPPDATA%\Microsoft\WindowsApps\python3.exe

と表記できます。
これらのコマンドは、Windowsストア画面を表示してPythonコマンドのインストールを促すもので、実際のPythonコマンドではありません。コマンドを検索する環境変数PATHの設定状況によっては、

%LOCALAPPDATA%\Microsoft\WindowsApps\

の中が先に検索された場合は、コマンドプロンプトで、 python と入力すると、これらが反応します。

コマンドプロンプトから python と入力して反応がなかったり、Windowsストア画面が表示されたりする場合は、Pythonコマンドがインストールされていないと考えても良いでしょう(実際はもっと厳密に調べる必要はありますが...)。

Pythonのインストール作業は、Pythonの大元の提供場所からダウンロードします。

Windows版のPython download

Stable Releases
Download Windows installer (64-bit)
Download Windows installer (32-bit)

Windows installerをダウンロードします。Pythonも32ビット版と64ビット版がありますが、この選択は、

Accessのビット数に合わせます。
Accessが64ビット版であれば、64ビット版のPythonをインストールします。
Accessが32ビット版であれば、32ビット版のPythonをインストールします。

このため、もしPythonコマンドが導入済みであっても、Accessのビット数と異なっている場合は、ビット数が合うPythonコマンドをインストールしてください。Pythonは、異なるバージョンなどと共存できるようになっています(インストール先のフォルダを変更する)。

Pythonのインストール画面は、ここでは省略しますが、1つだけ注意があります。
一番最初のインストール画面の下部に、

忘れずにチェックしましょう.png

  • Add python.exe to PATH

という項目がチェックできるようになっています。
初期画面ではチェックされていません。これを必ずチェックしてください。インストールしたPythonコマンドに対するパスを、環境変数に登録してくれます。コマンドプロンプトを起動て、python と入力すれば、すぐにPythonが起動します。

7.pyodbcパッケージのインストール

 WindowsのODBC(Open Database Connectivity)の仕組みを、Pythonプログラムから利用できるようにするパッケージが、pyodbcです。

pyodbc

コマンドプロンプトを起動して、インストールします。pip install pyodbc と入力します。

 なお、pythonの仮想環境を構築し、その中にインストールする方法が一番安全です。
 仮想環境は、

                  py -m venv venv

 と実行し、

                  venv\Scripts\activate

 で、仮想環境が起動します。その中に、pyodbcをインストールします。

C:\Work>py -m venv venv

C:\Work>venv\Scripts\activate

(venv) C:\Work>pip install pyodbc
Collecting pyodbc
  Using cached pyodbc-5.3.0-cp314-cp314-win32.whl.metadata (2.8 kB)
Using cached pyodbc-5.3.0-cp314-cp314-win32.whl (65 kB)
Installing collected packages: pyodbc
Successfully installed pyodbc-5.3.0

先頭に (venv) と表示されるのは、Pythonの仮想環境を表しています。

上記の画面では、32ビット版のパッケージを導入しています。

Accessデータベースに対して接続テストを実行しましょう

 製品版AccessまたはAccessランタイム実行環境がインストール済みであり、Pythonコマンドと、Pythonから利用できるODBCパッケージ(pyodbc)がインストールできました。
 ここまでの作業で、Pythonプログラムを作成し、Accessデータベースに接続を行うプログラムが動作します。
 ここまでの動作検証を兼ねて、以下のプログラムを実行します。

test_connect.py(プログラムは、UTF-8で保存してください)

import pyodbc

DBPath  = r'C:\Work\MyNewDatabase.accdb'
con_str = 'Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=' + DBPath + ';'
try:
    conn = pyodbc.connect(con_str)
    cur = conn.cursor()
    cur.execute("""select Format(now(),'yyyy年MM月DD日 hh時mm分ss秒') AS DT, 
                          sqr(2) AS Root2, 
                          IIf(sqr(5)>sqr(3),'大きい','小さい') AS BIG""")


    columns = [column[0] for column in cur.description]
    row = cur.fetchone()
    record = dict(zip(columns, row))

    print(f"   DT={row[0]}")
    print(f"Root2={row[1]}")
    print(f"  BIG={row[2]}\n")

    print(f"   DT={record['DT']}")
    print(f"Root2={record['Root2']}")
    print(f"  BIG={record['BIG']}\n")

    cur.close()
    conn.close()
    print("正常終了です")
except:
    print("エラーが発生しました")

実行結果

(venv) C:\Work>python test_connect.py
   DT=2026年01月08日 13時52分54秒
Root2=1.4142135623730951
  BIG=大きい

   DT=2026年01月08日 13時52分54秒
Root2=1.4142135623730951
  BIG=大きい

正常終了です

このプログラムは、

    5.3 Accessが入っているか?

で、作成した空のAccessデータベースを使います。test_connect.pyファイルを保存するときに、文字コードはUTF-8形式で保存してください。
先ほどインストールしたpyodbcを使って、ODBC経由でAccessのデータベースに接続を行います。
このデータベースは空っぽなので、表(テーブル)は存在しません。このため表のレコードを取得するような接続テストはできません。そこで、Accessが理解できるSQL文を投げて、その応答結果を見ることにしました。そのSQL文の中に、AccessのVBA関数を入れてみます。
 Format関数は、引数の値を編集した結果を返すものです。
 now関数は、現在日時を取得するものです。
 sqr関数は、数学の平方根を計算するものです。
 iif関数は、条件式の真偽値に応じた値を返すものです。
これらの関数の結果を、SQL文を使って取得します。

本来のSQL文にはSQLの文法で定義された関数を記述するべきですが、Accessの場合は、自由度が高く、一部のVBAの関数もこのようにSQL文の中に入れることができます。但し、これはあくまでも接続テストだからという目的なので使いました。通常時は他のデータベースとの互換性を考えて、止めるべきです。この点は注意してください。

AccessとPythonコマンド、そしてpyodbcが正常に働いていれば、上記のプログラムが正常に実行できると思います。このテストが正常にならないと、次には進めません。

8.Djangoのインストール

 Djangoは、最新版6.0系が、2025年12月にリリースされました。最新のホヤホヤです。
また long-term support (LTS)の5.2系 は、2025年4月にリリースしています。学習目的なのでDjangoのバージョンにこだわる必要性はあまりないと思いますが、Djangoの学習と同時並行して、AccessのデータベースアプリケーションをWebアプリ化する作業も始めたいのであれば、LTS版の導入が良いでしょう。
なお、Djangoの6.0系は、Python言語のバージョンが 3.12 以上になっています。多少古いPython言語を使っている場合は、新しいバージョンのPython言語をインストールしてください。
Python言語のPYコマンドを使うことで、異なるバージョンのPython言語を切り替えながら使うこともできます。

ここでは最新版6.0系をインストールします。仮想環境の中にインストールを行います。

                  pip install django

とします。

Django 6.0.1のインストール画面
(venv) C:\Work>pip install django
Collecting django
  Downloading django-6.0.1-py3-none-any.whl.metadata (3.9 kB)
Collecting asgiref>=3.9.1 (from django)
  Using cached asgiref-3.11.0-py3-none-any.whl.metadata (9.3 kB)
Collecting sqlparse>=0.5.0 (from django)
  Using cached sqlparse-0.5.5-py3-none-any.whl.metadata (4.7 kB)
Collecting tzdata (from django)
  Using cached tzdata-2025.3-py2.py3-none-any.whl.metadata (1.4 kB)
Downloading django-6.0.1-py3-none-any.whl (8.3 MB)
   ---------------------------------------- 8.3/8.3 MB 10.4 MB/s  0:00:01
Using cached asgiref-3.11.0-py3-none-any.whl (24 kB)
Using cached sqlparse-0.5.5-py3-none-any.whl (46 kB)
Using cached tzdata-2025.3-py2.py3-none-any.whl (348 kB)
Installing collected packages: tzdata, sqlparse, asgiref, django
Successfully installed asgiref-3.11.0 django-6.0.1 sqlparse-0.5.5 tzdata-2025.3

9.インストールしたDjangoの動作確認をしましょう(プロジェクトの作成)

 Djangoでは、『プロジェクト』と呼ばれる単位で、データベースなどの管理が行われます。
 ここでは『プロジェクト』の意味に関して深入りはしませんが、一番最初に『プロジェクト』の作成が必要だ、と覚えてください。

 プロジェクトを作業する場所(フォルダ)を決めます。ここでは、Pythonの仮想環境の中にDjangoをインストールしましたので、一番最初にPythonの仮想環境を起動してから、その後でプロジェクトのフォルダに移動します。 Djangoのプロジェクトのフォルダと、Pythonの仮想環境を作成したフォルダを同じにすると簡単になりますので、ここでは同じにしました。

 Djangoのプロジェクトの作成は

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

です。
 ここではプロジェクトの名前を DJLearn としました。

C:\Work>venv\Scripts\activate

(venv) C:\Work>django-admin.exe startproject DJLearn

プロジェクトと同じ名前のディレクトリが作成されますので、そこに入ります。

(venv) C:\Work>cd DJLearn

その中のファイルを表示します。

(venv) C:\Work\DJLearn>dir

 C:\Work\DJLearn のディレクトリ

2026/01/08  10:12    <DIR>          .
2026/01/08  10:12    <DIR>          ..
2026/01/08  10:12    <DIR>          DJLearn
2026/01/08  10:12               685 manage.py
               1 個のファイル                 685 バイト

この manage.py ファイルが、Djangoのプロジェクト管理を行うコマンドを起動します。そしてプロジェクトと同じ名前で作られるサブディレクトリの中に、プロジェクト管理を行うアプリケーションが収容されます。

DJLearnサブディレクトリを見てみましょう。

(venv) C:\Work\DJLearn>cd DJLearn

(venv) C:\Work\DJLearn\DJLearn>dir
 C:\Work\DJLearn\DJLearn のディレクトリ

2026/01/08  10:12    <DIR>          .
2026/01/08  10:12    <DIR>          ..
2026/01/08  10:12               407 asgi.py
2026/01/08  10:12             3,120 settings.py
2026/01/08  10:12               785 urls.py
2026/01/08  10:12               407 wsgi.py
2026/01/08  10:12                 0 __init__.py
               5 個のファイル               4,719 バイト

ここで表示される、settings.py ファイルが、プロジェクトの設定ファイルとなります。

今、このsettings.pyの次の個所を変更します。

LANGUAGE_CODE = 'en-us'

この項目の値を変更します。
LANGUAGE_CODE = 'ja'

TIME_ZONE = 'UTC'

この項目を変更します。
TIME_ZONE = 'Asia/Tokyo'

上記2か所を変更して、保存してください。

次にカレントディレクトリ位置を、manage.pyファイルがある場所に戻します。
そこで、Djangoの開発用Webサーバーを起動します。
開発用Webサーバーの起動は、python manage.py runserver です。

(venv) C:\Work\DJLearn\DJLearn>cd ..

(venv) C:\Work\DJLearn>dir
 C:\Work\DJLearn のディレクトリ

2026/01/08  10:12    <DIR>          .
2026/01/08  10:12    <DIR>          ..
2026/01/08  10:12    <DIR>          DJLearn
2026/01/08  10:12               685 manage.py
               1 個のファイル                 685 バイト

(venv) C:\Work\DJLearn>python manage.py runserver
Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).

You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
January 08, 2026 - 10:36:46
Django version 6.0.1, using settings 'DJLearn.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.

WARNING: This is a development server. Do not use it in a production setting. Use a production WSGI or ASGI server instead.
For more information on production servers see: https://docs.djangoproject.com/en/6.0/howto/deployment/

パソコンのブラウザを起動して、http://127.0.0.1:8000/ と入力します

ロケットが打ちあがる画面が表示されれば、成功です。

Djangoの動作確認.png

無事インストールできました。

CTRL+Cを押して、python manage.py runserve の実行を終えてください。

10.Djangoから利用する、マイクロソフト Access 接続ドライバ django-msaccess のインストール

 私がパッチを当てた「Access 接続ドライバ(django-msaccess)」は、最新版Django 6.0系でも動きます。その接続ドライバ(django-msaccess)をインストールします。
 ここでは、Pythonの仮想環境の中に、インストールしています。

(venv) C:\Work\DJLearn>pip install django-msaccess
Collecting django-msaccess
  Using cached django_msaccess-0.1.1-py3-none-any.whl.metadata (6.7 kB)
Requirement already satisfied: django>3.1.14 in c:\work\venv\lib\site-packages (from django-msaccess) (6.0.1)
Requirement already satisfied: asgiref>=3.9.1 in c:\work\venv\lib\site-packages (from django>3.1.14->django-msaccess) (3.11.0)
Requirement already satisfied: sqlparse>=0.5.0 in c:\work\venv\lib\site-packages (from django>3.1.14->django-msaccess) (0.5.5)
Requirement already satisfied: tzdata in c:\work\venv\lib\site-packages (from django>3.1.14->django-msaccess) (2025.3)
Using cached django_msaccess-0.1.1-py3-none-any.whl (48 kB)
Installing collected packages: django-msaccess
Successfully installed django-msaccess-0.1.1

インストールできました。

11.Accessデータベースが使用できるように、Django設定ファイルを修正します

    5.3 Accessが入っているか?

で作成した、C:\Work\MyNewDatabase.accdb を使います。

Djangoプロジェクト全体の設定ファイル settings.py の次の個所を書き換えます。

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}

Django設定ファイルの初期値は、sqllite3データベースを使う設定になっています。

この部分を次のように変更します。

DATABASES = {  
    'default': {  
        'ENGINE': 'django-msaccess',  
        'ODBC': '{Microsoft Access Driver (*.mdb, *.accdb)}',  
        'PATH': 'C:\\Work\\MyNewDatabase.accdb',  
        'DEBUG': False,  
        'TRUNCATENAME': True,  
    },
}

マイクロソフト Access のデータベースを、Djangoから使用できるように修正をします。
ENGINEに、パッケージの名前(django-msaccess)を書きます。

パス区切り文字の¥記号は、2重にします。

12.makemigrationsの実行

 Djangoプロジェクト内の models.py ファイルを編集した場合は、makemigrations コマンド(実際は manage.pyに対する引数)を実行して、models.py に加えた修正内容をファイル化します。
 現在は、プロジェクトを新規に作成した直後なので、models.py ファイルは存在しません。ですから、makemigrations コマンドの実行は不要です。
 実行しても、以下のような結果になります。

(venv) C:\Work\DJLearn>python manage.py makemigrations
No changes detected

これからDjangoの学習を進めていくと、models.py の作成や修正作業を行ってきます。その時、このコマンドを実行します。

13.migrateの実行

 makemigrations コマンドで作成された、models.py の修正結果を、実際のデータベースに反映させるコマンドが、migrate コマンド(これも manage.py に対する引数)です。
 まだ models.py の説明はしていませんが、簡単に触れますと、models.py の中に、データベースの表の宣言を記述します。つまり、プロジェクトを開発し運用を始めた後で、データベースの表の列を追加したい場面が出てきます。その時はデータベースを直接操作するのではなく、この models.py の中に新しい列の宣言を追加します。列を追加したら、makemigrations コマンドでその作業内容をファイルに書き出します。その後にmigrateコマンドでデータベースに反映させるという手順になります。

 この説明からもわかるように、

Djangoを使い始めたら、データベースの表は、models.py を使って保守作業を行う。
新しい表の作成や、表の列の追加や削除、インデックスの追加や削除など、データベースの表に関する作業は models.py を使って作業を行う。

この規則があります。

しかしAccessの場合は残念ながらこの規則通りには進みません。後でも触れますが、列の「値要求」の属性変更は、SQL文では働きません。このため、製品版AccessのGUI画面操作か、または、VBScrptなどのプログラムの作成が必要になってきます。

さて、プロジェクトを新規作成した後では、models.py ファイルは存在しません。この時、migrateコマンドを実行すると、データベースにDjangoのシステム管理用のテーブルが作成されます。
Djangoのこのテーブルは必ず必要なので、migrateコマンドを実行します。

Djangoのシステム管理用テーブルの作成
(venv) C:\Work\DJLearn>python manage.py migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying admin.0003_logentry_add_action_flag_choices... OK
  Applying contenttypes.0002_remove_content_type_name...


vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
                    Ignore SQL Statement.
              [CursorWrapper.execute(base.py)]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[EXECUTE_SQL]sql=SAVEPOINT [s9016_x1]
This SQL statement cannot be executed in Microsoft Access.
The execution of this SQL statement will be ignored.



vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
                    Ignore SQL Statement.
              [CursorWrapper.execute(base.py)]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[EXECUTE_SQL]sql=RELEASE SAVEPOINT [s9016_x1]
This SQL statement cannot be executed in Microsoft Access.
The execution of this SQL statement will be ignored.

 OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying auth.0008_alter_user_username_max_length... OK
  Applying auth.0009_alter_user_last_name_max_length... OK
  Applying auth.0010_alter_group_name_max_length... OK
  Applying auth.0011_update_proxy_permissions...

vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
                    Ignore SQL Statement.
              [CursorWrapper.execute(base.py)]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[EXECUTE_SQL]sql=SAVEPOINT [s9016_x2]
This SQL statement cannot be executed in Microsoft Access.
The execution of this SQL statement will be ignored.



vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv
                    Ignore SQL Statement.
              [CursorWrapper.execute(base.py)]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[EXECUTE_SQL]sql=RELEASE SAVEPOINT [s9016_x2]
This SQL statement cannot be executed in Microsoft Access.
The execution of this SQL statement will be ignored.

 OK
  Applying auth.0012_alter_user_first_name_max_length... OK
  Applying sessions.0001_initial... OK

(venv) C:\Work\DJLearn>

Accessのデータベースの中に、Djangoのシステム管理テーブルが作成されます。
製品版Accessがインストールされていれば、作成されたテーブルが見えるでしょう。
ここでは、次のVBScriptを実行して確認してみます。

'
' Accessデータベースのユーザ作成テーブルの名前の表示
'
Option Explicit
Dim DBPath
Dim conn, rs

DBPath="C:\Work\MyNewDatabase.accdb"

Set conn = CreateObject("ADODB.Connection")

' ACE.OLEDB プロバイダーを使用して接続
On Error Resume Next
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & DBPath
    If Err.Number <> 0 Then
        MsgBox "データベースに接続できませんでした。パスや実行環境を確認してください。" & vbCrLf & Err.Description
        WScript.Quit
    End If
On Error GoTo 0

' データベースのスキーマ情報を取得 (TABLE_TYPE='TABLE' でユーザーテーブルに限定)
' システムテーブルを含めたい場合は引数を調整します
'                        20 = adSchemaTables
Set rs = conn.OpenSchema(20, Array(Empty, Empty, Empty, "TABLE"))

Do While Not rs.EOF
    ' 標準出力に書き出し
    WScript.Echo rs("TABLE_NAME")
    rs.MoveNext
Loop

実行結果です

(venv) C:\Work>c:\windows\syswow64\cscript.exe //nologo show_table.vbs
auth_group
auth_group_permissions
auth_permission
auth_user
auth_user_groups
auth_user_user_permissions
django_admin_log
django_content_type
django_migrations
django_session

Djangoのシステム管理テーブルが、Accessのデータベースファイルの中に作成されました。
上記の作業は、32ビット版Accessがインストールされた環境で実行していますので、CScript.exe のパスが、C:\Windows\SysWOW64 になっています。64ビット版のAccessをインストールした場合は、パスの変更が必要です。ご注意ください。

14.auth_user テーブルの列属性の変更

 migrateコマンドで、Accessのデータベースの中にDjangoのシステム管理テーブルが一式、作成されましたが、まだDjangoの利用時に不都合が発生します。
 それは、Djangoのユーザ管理テーブル auth_user は、次のSQL文の発行で、列の修正が行われます。

ALTER TABLE [auth_user] ALTER COLUMN [last_login] datetime NULL
ALTER TABLE [auth_user] ALTER COLUMN [last_name]  varchar(150)
ALTER TABLE [auth_user] ALTER COLUMN [first_name] varchar(150)

この列の修正は、列のNULL値の許容を登録するのが目的です。ところが、AccessのSQL文では、このNULL値の許容登録が働かないようです。
このためNULL値の許容登録は、製品版Accessの場合は、auth_userテーブルをデザインビューで開いて、last_login、last_name、first_name各列の、「値要求」プロパティを、「はい」から「いいえ」に変更をします。

VBScriptを使って、修正を行う場合は、次のプログラムを実行します。

Dim DAO  
Dim dbs  
'  
' HKEY_CLASSES_ROOT\DAO.DBEngine.120  
'  
Set DAO = WScript.CreateObject("DAO.DBEngine.120")  
Set dbs = DAO.OpenDatabase("C:\Work\MyNewDatabase.accdb")  

dbs.TableDefs("auth_user").Fields("last_login").Required = False  
dbs.TableDefs("auth_user").Fields("first_name").Required = False  
dbs.TableDefs("auth_user").Fields("last_name").Required = False  

dbs.Close  
Set dbs = Nothing  
Set DAO = Nothing  

この事例のように、Djangoの学習を進めていくと、どうしても製品版Accessが手元にないと操作しにくい面があります。

15.まとめ(django-msaccess パッケージの注意点)

 私がパッチを当てて作成した django-msaccess パッケージは、Accessの.accdbデータベースファイルをDjangoから利用できるようにしたものです。ただ、万能ではなく、機能的には不十分なものです。以下の点を注意します。

15.1 トランザクション機能は無視される

 Accessが、SQL文の機能として、トランザクション命令を持っていません。このため、Djangoから発行されるトランザクション命令は、すべて無視するようにしました。
 具体的には、トランザクションの

SAVEPOINT [セーブポイントの名前]
RELEASE SAVEPOINT [セーブポイントの名前]

の命令は、AccessのSQL文ではエラーになるため、無視されます。

15.2 制約の長い名前は切り捨てる

 Accessの仕様として、制約名は64文字以内と決められています。それを超える長い名前を使うと、SQL文は実行されずにエラーとなります。
 このエラーを防ぐため、長い名前は64文字に切り詰めます。
 ところがこの機能の実装は不十分で、すり抜けが発生します。その場合はエラーが発生します。すり抜けが発生したSQL文は、私までご連絡をくだされば、パッチを追加し対応します。

15.3 inspectdbコマンドは実行できません

 manage.py の inspectdb 系列のコマンドは、実行できません。このため、データベースに存在する表(テーブル)から、models.py に組み込む表定義を自動作成することはできません。手作業で行います。

15.4 ネットワークを利用したファイル共有型Access運用よりは信頼性が上がるが...

 Djangoを利用した場合、Accessのデータベースはその1台のサーバー上の中で閉じられます。Webサーバー上の複数のプロセスから共有使用されます。このため、ネットワーク先にぶら下がっている複数台のパソコンからファイルサーバー上のAccessデータベースを共有する方式に比べれば、信頼性は格段に上がります。
 ただその効果を狙ってDjangoに移行するのも良いのですが、Djangoに移行したら、データベースシステムは容易に交換することもできます。

「13.migrateの実行」 で説明したように、Djangoではデータベースの表を直接触るような行為は避けます。models.pyを修正し、その結果をデータベースにコマンドによって反映させるという手順を取ります。
Djangoで開発されたプロジェクトはどのデータベースでも動くというような作り方をします。そのためには、できる限りSQL文の命令は、直接は使わないようにします。

15.5 まだ対応しないSQL文が多いです

 実際の複雑な models.py を構築すると、Accessに対して、ODBCの実行時エラーが発生すると思います。エラーが出たら、エラーの出たSQL文をAccessのSQL文に変更するための方策を考えます。大部分は、Pythonの正規表現の置換処理で対応できると思います。そのパッチを組み込みます。パッケージのソースファイル base.py や sql_patch.py に組み込んで行きます(プログラムはちょっと汚いのでごめんなさい)。
 Accessで動かすために、SQL文はこのパッチリストをすべて通されます。だから、処理が遅くなると言うことも覚えておきましょう。

15.6 やっぱり、学習目的で使ってください

 SQL文の実行が遅くなるということで、Djangoの正式な運用では、Accessのデータベースは採用しないでください。あくまでも学習目的で利用します。
 私は、AccessのフォームをWeb化した後のREST-APIの組み込み作業を、手元のパソコンでその動作確認をするために使っています。その目的のために、18fさんの原型となっているパッケージにパッチを当てました。
AccessのWebアプリケーションを開発する作業で、このパッケージをお使いください。

以上、長い文章をお読みくださり、感謝します。

ありがとうございました。

モデル操作に関する記事も書きました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?