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)
などせずに接続できましたでしょうか?