Python総合学習【データベース操作編】

データベースへの接続

データベースに接続する処理について解説します。

ソース

#coding: shift_jis

import win32com.client

Cn = win32com.client.Dispatch("ADODB.Connection")

strCn = "Provider=SQLOLEDB;" \
         "Data Source=localhost\\SQLExpress;" \
         "Initial Catalog=Database;User ID=sa;Password=sa;"

Cn.ConnectionString = strCn
Cn.Open()

print("接続完了")
input()

Cn.Close()

ADODB.Connection

データベース接続に使用するオブジェクト

Connection.ConnectionString = 接続文字列

接続文字列を設定します。

Connection.Open()

データベースに接続します。

Connection.Close()

データベースとの接続を切断します。

データの取得

データを取得する処理について解説します。

ソース

#coding: shift_jis

import win32com.client

Cn = win32com.client.Dispatch("ADODB.Connection")

strCn = "Provider=SQLOLEDB;" \
         "Data Source=localhost\\SQLExpress;" \
         "Initial Catalog=Database;User ID=sa;Password=sa;"

Cn.ConnectionString = strCn
Cn.Open()

strSQL = "SELECT * FROM 社員マスタ"

Rs = win32com.client.Dispatch("ADODB.Recordset")
Rs.Open(strSQL, Cn)

while not Rs.EOF:
    print(Rs.Fields("社員コード").Value, Rs.Fields("社員名").Value)
    Rs.MoveNext()
input()

Rs.Close()
Cn.Close()

ADODB.Recordset

データ操作に使用するオブジェクト

Recordset.Open(SQL文, Connectionオブジェクト)

レコードセットを作成します。

Recordset.Close()

レコードセットを閉じます。

SQLの実行

SQLを実行する処理について解説します。

ソース

#coding: shift_jis

import win32com.client

Cn = win32com.client.Dispatch("ADODB.Connection")

strCn = "Provider=SQLOLEDB;" \
         "Data Source=localhost\\SQLExpress;" \
         "Initial Catalog=Database;User ID=sa;Password=sa;"

Cn.ConnectionString = strCn
Cn.Open()

strSQL = "UPDATE 社員マスタ " \
          "SET 部門コード = 3 " \
          "WHERE 社員コード = 4"

Cn.Execute(strSQL)
print("更新完了")
input()

Cn.Close()

Connection.Execute(SQL文)

指定されたSQL文を実行します。

トランザクション処理

トランザクション処理について解説します。

ソース

#coding: shift_jis

import win32com.client

Cn = win32com.client.Dispatch("ADODB.Connection")

try:
   Cn.ConnectionString = "Provider=SQLOLEDB;" \
         "Data Source=localhost\\SQLExpress;" \
         "Initial Catalog=Database;User ID=sa;Password=sa;"
   Cn.Open()
   Cn.BeginTrans()

   strSQL = "INSERT 社員マスタ VALUES(1, '社員A', 1)"
   Cn.Execute(strSQL)

   strSQL = "INSERT 所有資格マスタ VALUES(1, 1, '簿記3級')"
   Cn.Execute(strSQL)

   Cn.CommitTrans()
   print("更新完了")
except:
   Cn.RollbackTrans()
   print("更新失敗")
finally:
   Cn.Close()
   input()

Connection.BeginTrans()

トランザクション処理を開始します。

Connection.CommitTrans()

更新内容を確定する場合は、コミットします。

Connection.RollbackTrans()

更新内容を破棄する場合は、ロールバックします。

データベース別の接続文字列

データベース別の接続文字列については、ご覧のとおりです。

ソース

Oracle

strCn = "Provider=OraOLEDB.Oracle;" \
         "Data Source=ホスト名:1521/XEPDB1;" \
         "User Id=MYUSER;Password=MYUSER;"

MySQL

strCn = "DRIVER={MySQL ODBC 8.0 ANSI Driver};" \
         "SERVER=localhost;PORT=3306; " \
         "DATABASE=myschema;UID=root;PASSWORD=manager;"

Access

strCn = "Provider=Microsoft.ACE.OLEDB.12.0;" \
         "Data Source=C:\\Users\\home\\Desktop\\Database.accdb"