Windows10 Office2010 (32.bit)インストール時にPythonからAccessのmdbファイルを操作する
PythonからAccessのmdbファイルを操作する場合、Win10の64Bit OSでOffice2010の32bit版をインストールすると、Pythonから操作できなかった。
上記の環境下で64bitドライバを32bitドライバと共存させることで、PythonからAccessを操作できた。
Microsoft Access データベース エンジン 2010 再頒布可能コンポーネントから64bit用ドライバ AccessDatabaseEngine_X64.exeをダウンロードする
「/passive」をつけてインストールする。(インストーラのチェックを回避するため)
レジストリエディタ(regedit.exe)を開き、次のエントリを削除します。
(Office起動時に再設定が走らないようにするため)
HKEY_LOCAL_MACHINESOFTWAREMicrosoftOffice14.0CommonFilesPathsの『mso.dll』
Windows10上のPythonでAccessのDBを参照するこちらを参考に
pip install pyodbc でインストール
Pythonのインタラクティブモードでドライバのインストール状況を確認
Accessのmdbファイルを作って読んでみます(table1というテーブルが入っています)
正しく読めました。ドライバー関連でうまく動かなかったので助かりました。
上記の環境下で64bitドライバを32bitドライバと共存させることで、PythonからAccessを操作できた。
手順
Office2010 32bit版がインストールしてある環境でPythonからAccessを操作を参考にMicrosoft Access データベース エンジン 2010 再頒布可能コンポーネントから64bit用ドライバ AccessDatabaseEngine_X64.exeをダウンロードする
「/passive」をつけてインストールする。(インストーラのチェックを回避するため)
AccessDatabaseEngine_X64.exe /passive
レジストリエディタ(regedit.exe)を開き、次のエントリを削除します。
(Office起動時に再設定が走らないようにするため)
HKEY_LOCAL_MACHINESOFTWAREMicrosoftOffice14.0CommonFilesPathsの『mso.dll』
Windows10上のPythonでAccessのDBを参照するこちらを参考に
pip install pyodbc でインストール
pip install pyodbc
Pythonのインタラクティブモードでドライバのインストール状況を確認
>>> import pyodbc >>> [x for x in pyodbc.drivers() if x.startswith('Microsoft Access Driver')] ['Microsoft Access Driver (*.mdb, *.accdb)'] >>>
Accessのmdbファイルを作って読んでみます(table1というテーブルが入っています)
import sys import pyodbc con_str = 'Driver={{Microsoft Access Driver (*.mdb, *.accdb)}};Dbq={0};'.format(r"C:\PROJECT\python\access\db.mdb") conn = pyodbc.connect(con_str) cur = conn.cursor() sql_create_table = ('select * from table1;') cur.execute(sql_create_table) for row in cur.fetchall(): print(row)
正しく読めました。ドライバー関連でうまく動かなかったので助かりました。
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license()" for more information. >>> ============= RESTART: C:\PROJECT\python\access\db_odbc_test.py ============= ('123', ) ('456', ) ('789', ) >>>
コメント
コメントを投稿