前提条件
Eclipse は Pleiades Eclipse 4.7 Oxygen です。前提となる環境は以下を参照して下さい。
Pleiades Eclipse 4.7 Oxygen 2 Windows 64bit Ultimate Full Edition のインストールといろいろな準備
Pleiades Oxygen 2 の XAMPP 内の MySQL を利用可能にしてテストデータ(販売管理)を登録する
▼ プロジェクトの作成方法はこちらを参照して下さい
Pleiades Eclipse 4.7 Oxygen で Python を使って MySQL にアクセスする
pywin32 + COM
COM 経由で ADO を使って MySQL にアクセスする為に、pywin32 をインストールします。
インストールは、pip install pywin32 でインストールできます。但し、『Fatal error in launcher: Unable to create process using '"'』というエラーが出た場合は、以下のコマンドを実行してから再度実行して下さい。
python -m pip install -U pip
pywin32 の readme にもありますが、さらに『COMオブジェクトの登録やWindowsサービスの実装などの「システムワイド」機能でpywin32を使用する場合は』管理者権限のコマンドプロンプトから以下を実行します
python Scripts/pywin32_postinstall.py -install
▼ 実行結果
Copied pythoncom36.dll to C:\WINDOWS\system32\pythoncom36.dll
Copied pywintypes36.dll to C:\WINDOWS\system32\pywintypes36.dll
Registered: Python.Interpreter
Registered: Python.Dictionary
Registered: Python
-> Software\Python\PythonCore\3.6\Help[None]=None
-> Software\Python\PythonCore\3.6\Help\Pythonwin Reference[None]='C:\\pleiades\\python\\3\\Lib\\site-packages\\PyWin32.chm'
Pythonwin has been registered in context menu
Creating directory C:\pleiades\python\3\Lib\site-packages\win32com\gen_py
Shortcut for Pythonwin created
Shortcut to documentation created
The pywin32 extensions were successfully installed.
Connector/ODBC 5.3.10
ADO から接続する場合、純粋に Windows からのアクセスになるので ODBC ドライバが必要になります。Python が 64ビットならば、ODBC ドライバも 64ビット用が必要になります。
ダウンロードページ
com_ado_mysql
以下は、ADO + COM で行われる標準的なレコードセットの読み込みと同時更新の処理です。
特徴的なのは、レコードセットの Fields コレクション( Field オブジェクト )を使用して値を直接セットして一行づつレコードを更新するところです。
import win32com.client
adOpenDynamic = 2
adLockOptimistic = 3
cn = win32com.client.Dispatch("ADODB.Connection")
rs = win32com.client.Dispatch("ADODB.Recordset")
driver = "{MySQL ODBC 5.3 Unicode Driver}"
server = "localhost"
DB = "lightbox"
User = "root"
Pass = ""
ConnectionString = "Provider=MSDASQL;Driver={0};Server={1};DATABASE={2};UID={3};PWD={4};"
ConnectionString = ConnectionString.format(driver,server,DB,User,Pass)
print(ConnectionString)
"""""""""""""""""""""""""""
接続
"""""""""""""""""""""""""""
try:
cn.Open( ConnectionString )
except Exception as e:
print( e )
exit()
rs.CursorType = adOpenDynamic
rs.LockType = adLockOptimistic
rs.Open( "select * from 社員マスタ where 社員コード <= '0004' ", cn )
while not rs.EOF:
print(rs.Fields("社員コード").Value,end=",")
print(rs.Fields("氏名").Value, end=",")
print(rs.Fields("フリガナ").Value, end=",")
print(rs.Fields("所属").Value, end=",")
print(rs.Fields("性別").Value, end=",")
print(rs.Fields("給与").Value, end=",")
print(rs.Fields("手当").Value, end=",") # NULL の場合は None と出力
print(rs.Fields("管理者").Value, end=",")
print("{0:%Y/%m/%d}".format(rs.Fields("作成日").Value), end=",")
print("{0:%Y/%m/%d}".format(rs.Fields("更新日").Value), end=",")
print("{0:%Y/%m/%d}".format(rs.Fields("生年月日").Value))
rs.Fields("管理者").Value = "0002"
rs.Update()
rs.MoveNext()
"""""""""""""""""""""""""""
接続解除
"""""""""""""""""""""""""""
if cn.State >= 1:
cn.Close()
print("終了しました")
CursorTypes, LockTypes, and CursorLocations
※ MySQL は 以下の三つの組み合わせのみ動作
adUseClient/adOpenStatic
adUseServer/adOpenForwardOnly
adUseServer/adOpenDynamic
※ ADO でデフォルトは adUseServer
エディタのタブ設定
エディタの # コメント色
デフォルトが灰色で見にくいので濃い緑を使用しました