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

2021年3月27日土曜日

Python

t f B! P L

PythonでSQL Serverに接続して、SELECTUPDATE文などのSQLを実行する方法を紹介します。

SQL Serverへ接続する方法としてpyodbcパッケージを使った方法が最もメジャーであるため、この記事でもpyodbcを使った方法で紹介します。

スポンサーリンク

「pyodbc」のインストール

pyodbcは、ODBC経由でSQL Serverをはじめとするデータベースと接続するパッケージです。ODBC経由でデータベースに接続するため、OracleやMySQLなどと接続するケースでも使えます。

pyodbcはパッケージマネージャーの「pip」か、Anaconda環境であれば「conda」コマンドからインストールします。

pipでインストール

pip install pyodbc

conda (Anaconda) でインストール

conda install -c anaconda pyodbc

SQL Serverへ接続

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

import pyodbc

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)

スポンサーリンク

まとめ

Python+pyodbc でSQL Serverに接続する方法を紹介してきました。

EOF

スポンサーリンク

QooQ