PythonでSQL Serverに接続して、SELECTやUPDATE文などの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

とてもシンプルな手順ですね!この手順なら
返信削除Microsoft ODBC Driver for SQL Server のインストール (https://docs.microsoft.com/ja-jp/sql/connect/odbc/windows/system-requirements-installation-and-driver-files?view=sql-server-ver15#installing-microsoft-odbc-driver-for-sql-server)
などせずに接続できましたでしょうか?