PythonでSQL Serverに接続してSQLを実行する

2021年2月4日木曜日

Python

t f B! P L

PythonでODBC経由でSQL Serverに接続して、SELECTやUPDATE文などを実行する方法を紹介します。

pyodbcのインストール

今回は、pyodbcというライブラリを使って、ODBC経由でSQL Serverに接続します。
ODBC経由でデータベースに接続するため、今回紹介する方法は、SQL Server以外にもOracleやMySQLなどにも使えます。

pyodbcのインストールのインストールは、Pythonのパッケージマネージャー(pip)で行います。

pip install pyodbc

Anaconda環境を使用している場合は、condaコマンドでpyodbcをインストールします。

conda install -c anaconda pyodbc

SQL Serverへ接続

ではpyodbcを使って、SQL Serverに接続するコードを書いてみましょう。
DBへの接続は、pyodbc.connect(<接続文字列>)メソッドで行います。

instance = "<接続先のサーバー名>"
user = "<ユーザー>"
password = "<パスワード>"
db = "<データベース名>"

#接続文字列の組み立て
conn_str = "DRIVER={SQL Server};SERVER=" + instance + \
     ";uid=" + user + \
     ";pwd=" + password + \
     ";DATABASE=" + db

#データベースへ接続
conn = pyodbc.connect(conn_str)

SELECT文の実行

次にSELECT文を実行して、データベースのテーブルからレコードを取得するコードを書いてみましょう。

cursor = conn.cursor()
cursor.execute("SELECT Id, Name, Age, City FROM Users")
rows = cursor.fetchall()
cursor.close()

for r in rows:
    print(r[0])
    print(r[1])
    print(r[2])
    print(r[3])

パラメータの使用

いわゆるバインド変数を使用してSQLにパラメータを渡す場合は、SQL文はWHERE Id = ?のように?を使ってバインド変数化し、executeの第2引数以降にバインドする値を指定します。

cursor.execute("SELECT * FROM Users WHERE Age >= ?" AND City = ?, 20, "TOKYO")

更新系SQL(INSERT, UPDATE, DELETE)の実行

INSERT, UPDATE, DELETE文を実行して、レコードを更新する場合は、カーソルのexecuteメソッドを使用します。

cursor = conn.cursor()
cursor.execute("UPDATE Users SET Age = 20 WHERE Id = 1000")
con.commit()

パラメータの使用

SELECT文と同様に、バインド変数を使用してSQLにパラメータを渡す場合は?使い、executeの第2引数以降にバインドする値を指定します。

cursor.execute("UPDATE Users SET Age = ? WHERE Id = ?", 20, 1000)
スポンサーリンク

QooQ