PythonからSQL Serverを動かそう！～接続編～

#目次
[0.この記事を書いた経緯](#0-この記事を書いた経緯)
[1.対象読者](#1-対象読者)
[2.環境](#2-環境)
[3.手順](#3-手順)
[4.苦労した点](#4-苦労した点)
[5.まとめ](#5-まとめ)
[6.参考サイト](#6-参考サイト)

#0-この記事を書いた経緯
PythonとSQL Serverの学習の備忘録として書きました。
この記事を読むと、SQL Serverに作成したDBの値をPythonで取り出して表示することができるようになります。

#1-対象読者
Pythonを実行出来る環境がある方
(Visual Studio Code等)
pipでライブラリをインストールできる方
PythonとDBを一通り学習された初学者の方
DBをソースコードから動かしてみたい方

#2-環境
Python 3.9.4
SQL Server 2019 (Express)
SSMS(SQL Server Management Studio) 18.9(日本語版)
pyodbc 4.0.30

※すべてlocal環境(Windows10 64bit)で動作させています。

#3-手順
**(1)環境構築**
・「Python」,「SQL Server」,「SSMS(SQL Server Management Studio)」のインストール
※本記事ではインストールの手順については詳しく説明はしませんのでよく調べてダウンロードして下さい。[下記](#6-参考サイト)に参考URLを置いておきます。

・DBの準備
SSMSを立ち上げます。今回はWindows認証で接続します。
![windows_permission.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677151/d4e30298-8907-7d26-b297-3f61eb4b302c.png)

立ち上げたら「データベース」を右クリックして「新しいデータベース」を押下します。
![create_db1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677151/edb95d62-047a-f407-98a2-33394f56f566.png)

押下すると以下のウィンドウが立ちあがるので任意の名前を入力します。入力したら「OK」を押します。
![create_db2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677151/bbd0692a-2549-9db2-4b85-d0887b999dcf.png)

戻るとデータベースができているので今度は画面の階層までフォルダを展開して、「テーブル」を右クリックします。「新規作成」から「テーブル」を押下します。
![create_db3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677151/3257964b-827b-1c97-25bb-f3394b522359.png)

以下の画像のようにテーブルを作成します(あくまで1例)。
※id列のプロパティの「テーブルデザイナー」の「IDENTITY」の指定を「はい」にすると自動でidが追加されます。
![create_db4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677151/8abd05bc-3b87-9c29-73bc-4f4d8dd5bcd5.png)


保存するとテーブルの名前を要求されるので任意の名前を入力します。
![create_db5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677151/aba06e30-977c-5cc7-560e-a449b2f572e7.png)

オブジェクトエクスプローラーの画像の更新マークを押下します。
![create_db5A.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677151/7168a9c9-6a15-7ded-7f47-6b856268de4f.png)

押下して「テーブル」まで展開するとテーブルが作成されているのがわかります。
![create_db6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677151/2eda1b30-6ca3-4748-ec84-698a75f9119f.png)

データベースに任意の値を入力します。テーブルを右クリックして「上位200行の編集」を押下します。
![create_db7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677151/06354e19-b885-d2a7-84a1-da91e0bc19a5.png)

適当な値を入力します。
![create_db8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677151/2b706003-9526-28e3-10f3-f937d8e9947a.png)


・TCP/IPの設定
スタートメニューから「SQL Server構成マネージャー」を開き「SQL Serverネットワークの構成」を展開し、「SQLEXPRESSのプロトコル」の「TCP/IP」を有効にします。
「IPアドレスタグ」を開き、一番下にある「IPALL」の「TCPポート」を「1433」に設定します。
※[参考にした記事](https://lightgauge.net/language/python/9117/)

・pyodbcのインストール
pyodbcとはMicrosoftが推奨しているPython 用の SQL ドライバーです。今回はpyodbcを使用するのでインストールをします。インストールについては[こちら](https://docs.microsoft.com/ja-jp/sql/connect/python/pyodbc/step-1-configure-development-environment-for-pyodbc-python-development?view=sql-server-ver15)を参考に行ってください。

以上で準備は完了です。

**(2)コードの用意**

~~~Python:main.py
import pprint
import pyodbc

def login():
	driver='{SQL Server}'
	server = '(1)SQLServerが稼働しているサーバー名'
	database = '(2)データベース名'
	trusted_connection='yes'

	connect= pyodbc.connect('DRIVER='+driver+';SERVER='+server+';DATABASE='+database+';PORT=1433;Trusted_Connection='+trusted_connection+';')
	cursor = connect.cursor()
	cursor.execute( "SELECT * FROM (3)Table_1" )
	rows = cursor.fetchall()
	pprint.pprint( rows )

	cursor.close()
	connect.close()

if __name__ == '__main__':login()

~~~


**(3)コードの内容**
コードの(1)、(2)、(3)には以下の画像の(1)、(2)、(3)の値を入力します。
![create_db9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/677151/2289d8e7-3005-7b84-81ab-44eff95f39db.png)

コードを実行すると以下のようになり、値を取り出せました。

```:実行結果
[(1, 'a', 1000, '2021-03-01'), (2, 'b', 2000, '2021-04-01')]
```

#4-苦労した点
別の環境で「SQL Server構成マネージャー」を探した際に、スタートメニューにありませんでした。結局場所については[こちら](https://docs.microsoft.com/ja-jp/sql/relational-databases/sql-server-configuration-manager?view=sql-server-ver15)を参考にしたら見つかりました。

#5-まとめ
DBをPythonから動かすことに成功しました。次はWebアプリケーションのGUIから値を操作することを目標に開発しようと思います。
[次回記事](https://qiita.com/wiskerpaddy/items/7b7ee97d69393dd9737b)

#6-参考サイト

・各種ソフトウェアのインストール
[Download Python | Python.org](https://www.python.org/downloads/)
[オンプレミスまたはクラウドで SQL Server をお試しください](https://www.microsoft.com/ja-jp/sql-server/sql-server-downloads)
[SQL Server Management Studio (SSMS) のダウンロード](https://docs.microsoft.com/ja-jp/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver15)
[手順 1:pyodbc Python 開発用に開発環境を構成する](https://docs.microsoft.com/ja-jp/sql/connect/python/pyodbc/step-1-configure-development-environment-for-pyodbc-python-development?view=sql-server-ver15)

・DBの環境構築
[pyodbcでWindows認証でSQLServerにリモート接続する方法]( https://lightgauge.net/language/python/9117/ )
[Python環境にpyodbcをインストールしてSQLServerに接続する手順]( https://rainbow-engine.com/python-pyodbc-install/ )
[Configure the Windows Firewall to Allow SQL Server Access]( https://docs.microsoft.com/ja-jp/sql/sql-server/install/configure-the-windows-firewall-to-allow-sql-server-access?view=sql-server-ver15 )