PythonでSQLServerに接続する

1.SQLServerのドライバをインストールする。

ドライバには、microsoftがテストをしたpyodbc Driverとpymssqlのドライバがあるようです。
このページではpyodbcを使った接続方法を説明していきます。
※私のやり方が悪いせいか、pymssqlでは動作確認ができませんでした。

Microsoftの説明Websiteはこちら

まず、環境の確認をして自身に環境に合ったドライバをインストールします。
※devは私のユーザ名なので、それぞれの環境で置き換えてください。
C:\Users\dev>py –version Python 3.8.2

こちらのサイトからバージョンに合ったものをドライバをダウンロードしてインストールします。


こちらから自身の環境に合ったバージョンのドライバをダウンロードします

私の環境ではpymssql-2.1.4-cp38-cp38-win32.whlをdownloadします。
Pythonのインストールフォルダへコピーします。
C:\Users\dev\AppData\Local\Programs\Python\Python38-32 人によってはC:\Python38などになると思います

2.pyodbcモジュールをインストールします

コマンドライン(cmd.exe)を開き、下記コマンドを入力します
> cd C:\Users\dev\AppData\Local\Programs\Python\Python38-32
> pip install pyodbc
(> py -m pip install pyodbc)

C:\Users\dev\AppData\Local\Programs\Python\Python38-32>py -m pip install pyodbc Collecting pyodbc Downloading pyodbc-4.0.30-cp38-cp38-win32.whl (58 kB) |████████████████████████████████| 58 kB 1.6 MB/s Installing collected packages: pyodbc Successfully installed pyodbc-4.0.30



補足:pymssqlモジュールをインストールします(動作失敗)

コマンドライン(cmd.exe)を開き、下記コマンドを入力します
> cd C:\Users\dev\AppData\Local\Programs\Python\Python38-32
> pip install pymssql-2.1.4-cp38-cp38-win32.whl
(> py -m install pymssql-2.1.4-cp38-cp38-win32.whl)

成功すると下記の様に表示されます。
ですが、こちらの環境ではうまく実行できませんでした。
C:\Users\dev\AppData\Local\Programs\Python\Python38-32>py -m pip install pymssql-2.1.4-cp38-cp38-win32.whl
Processing c:\users\dev\appdata\local\programs\python\python38-32\pymssql-2.1.4-cp38-cp38-win32.whl
Installing collected packages: pymssql
Successfully installed pymssql-2.1.4

3.Pythonから接続してみる

import pyodbc 
server = 'localhost' 
database = 'TEST'
username = 'dbusername' 
password = 'dbuserpassword' 
cnxn = pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)
cursor = cnxn.cursor()

cursor.execute("SELECT @@version;") 
row = cursor.fetchone() 
while row: 
    print(row[0])
    row = cursor.fetchone()


実行結果(Result)
Microsoft SQL Server 2017 (RTM-GDR) (KB4505224) – 14.0.2027.2 (X64) Jun 15 2019 00:26:19 Copyright (C) 2017 Microsoft Corporation Express Edition (64-bit) on Windows 10 Pro 10.0 (Build 18363: ) 説明は以上

Environment
Windows10, Python 3.8.2, SQLServer, pyodbc

Continue Reading

例外 try except – Python

例外処理

try:
    a = a / 100
except NameError:
    print("変数名エラー")
else:
    print("エラーが発生しなかったらここを処理")
finally:
    print("エラー処理終了1")


try:
    a = 100 / 0
except (ZeroDivisionError,TypeError):
    print("0割り、型変換エラー")
finally:
    print("エラー処理終了2")


try:
    raise SyntaxError # 例外を引き起こす

except Exception:
    print("構文エラー")

実行結果は続きを

Continue Reading

セット型 Set 集合 – Python

セット型 set 集合
重複しない要素がまとめてあるもの

ts1 = {10, 20, 30, 40, 50, 40, 60}
ts2 = set([10, 20, 100]) # set()でも生成できる。

print(ts1)  # 重複する要素40は、1つしかない
print(ts2)

ts1.add(70)
print(ts1)

ts1.discard(55) # 要素があれば削除し、要素がなければそのまま
print(ts1)
ts1.discard(50)
print("discard = ", ts1)


ts1.remove(70) # 要素がなければKeyErrorが発生
print("ts1 = ", ts1)
print("ts2 = ", ts2)

ts3 = ts1 - ts2 # 1にあって2に無い要素を返されます。
#ts3 = ts1.difference(ts2)
print("ts1.difference = ", ts3)

ts3 = ts1 | ts2 # ts1とts2の要素を結合し、一意の要素が残り返されます。
#ts3 = ts1.union(ts2)
print("ts1.union = ", ts3)

ts3 = ts1 & ts2 # ts1とts2の両方に存在する要素が返されます。
# ts3 = ts1.intersection(ts2)
print("ts1.intersection = ", ts3)

ts3 = ts1 ^ ts2 # ts1とts2のどちらかにしか存在しない要素が返されます。
# ts3 = ts1.symmetric_difference(ts2)
print("ts1.symmetric_difference = ", ts3)

ts1.clear()
print("after clear = ", ts1)

# ts1.pop() 要素がないとKeyErrorが発生

出力結果は続きを

Continue Reading

タプル型 tuple – Python

タプル型は、イミュータブルimmutableで要素の値が変更できません。

tp = (10,20,30)
print("tp[0] = ", tp[0])
print("tp    = ", tp)
# tp[0] = 50  エラーが起きる。タプルの値は変更できない。

tp2 = ([11, 22, 33],[55, 66, 77])
print("tp2 = ", tp2)

dlist = [100, 200, 300]
tp3 = tuple(dlist) #リストをタプル型に変換する
print("tp3 = ", tp3)


a = 50
b = 150
c = '250'
d = (a, b, c) #タプルパッキング
e, f, g = d  #アンパッキング
print("e = ", e)
print("f = ", f)
print("g = ", g)

出力結果は続きを….

Continue Reading

リストデータ型 list – Python

リストはミュータブルmutableなデータ構造で、異なるデータ型でも格納できます。

dlst2 = [10,'20',30,'40']
print(dlst2)
print( dlst2[-1])  # 最終データを出力 '40'
print( dlst2[2:] ) # 3つ目以降を出力 30, '40'

dlst3 = [10,20,30,10,50,100]
print( dlst3 )
print("count=", dlst3.count(10) ) # 指定された要素をカウントする
print("index = ", dlst3.index(50) ) # 要素の中で最初に出現する場所を返す

dlst3.append(150) # 要素を最後尾に追加
print("append = ", dlst3 )
dlst3.insert(4,30) # 要素を最後尾に追加
print("insert = ", dlst3 )
dlst3.remove(30) # 最初に出現する要素30を削除
print("remove = ", dlst3 )

dlst3.pop(2) # 3つ目の要素を削除
print("pop = ", dlst3 )

dlst4 = ['aaa','bbb']
dlst3 = dlst3 + dlst4 # リストに別のリストを追加
print("dlst3 + dlst4 = ", dlst3 )
dlst3.reverse() # リストの内容を逆順にする
print("reverse = ", dlst3 )

dlst3.clear() # 要素を全削除
print("clear = ", dlst3 )

# rangeを使ってリストを生成
dlst5 = list( range(0, 51, 10) ) 
print( dlst5 )

出力結果は続きを….

Continue Reading

ロギング(logging)サンプル – Python

ロギングのサンプル(logging)

デバッグや運用時のエラー等の運用で必要になるので調べました。

コンフィグでファイル出力やメール送信等もできるとのこと。
logging.basicConfig(filename=’apl.log’,level=logging.DEBUG)

import logging

# sampleloggerという名前のロガーを作成
outlog = logging.getLogger("samplelogger")

logsh = logging.StreamHandler()

#ログのローマットを設定
lformat = logging.Formatter('%(asctime)s [%(levelname)s] %(name)s %(message)s')
logsh.setFormatter(lformat)
outlog.addHandler(logsh)

# print("LogLevel(Default) = " , outlog.getEffectiveLevel()) 
# デフォルトのログレベルはWARNING(30)でした。
outlog.setLevel(logging.DEBUG) #ログレベルを10に設定

print("LogLevel(Set) = " , outlog.getEffectiveLevel() )

outlog.info("testlog info")
outlog.warning("testlog warning")
outlog.critical("testlog critical")
outlog.error("testlog error")
outlog.log(logging.ERROR,"testlog loglevel 30")

【出力結果】
LogLevel(Set) = 10
2016-12-07 03:08:07,363 [INFO] samplelogger test info
2016-12-07 03:08:07,363 [WARNING] samplelogger test warning
2016-12-07 03:08:07,363 [CRITICAL] samplelogger test critical
2016-12-07 03:08:07,364 [ERROR] samplelogger test error
2016-12-07 03:08:07,364 [ERROR] samplelogger test loglevel 30

※設定されているログレベルより低いレベルのログは、出力されません。

ログレベル数値定数
NOTSET0logging.NOTSET
DEBUG10logging.DEBUG
INFO20logging.INFO
WARNING30logging.WARNING
ERROR40logging.ERROR
CRITICAL50logging.CRITICAL

Continue Reading

ファイルの読み込み – Python

ファイルを読み取り場合の流れは、他の言語とほとんど変わりません。
1.ファイルをオープン
2.データの読み込み
3.ファイルをクローズ

ファイルオープンについては、open(ファイル名, モード, 文字エンコーディング)で開きます。
モードと文字コードは省略できますが、モードは”r”の読み取り、文字エンコーディングは”utf-8″が
デフォルトになります。

Continue Reading

Python用語・ミニ知識

わからなかった用語とかミニ知識が増えたら追加します。

イミュータブル[immutable]
固定の値を持ったオブジェクトで、変更できないオブジェクト
数値、文字列、タプル等

ミュータブル[mutable]
ミュータブルなオブジェクト
id()が変更されることなく、変更できるオブジェクト

PIP
Pythonのパッケージ管理システム

Continue Reading