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

VB.net + PostgreSQL + Npgsql DBConnect Update Delete Sample

更新または削除のサンプル

Imports Npgsql '忘れずに

     '接続文字列は適当に変更してください。
        Dim builder As New Npgsql.NpgsqlConnectionStringBuilder
        With builder
            .Host = "192.xxx.xxx.xxx"
            .Database = "dbname"
            .Username = "username"
            .Password = "password"
            .Port = 5432
            .Timeout = 20
        End With

        Dim command As NpgsqlCommand = New NpgsqlCommand("insert into tablename(name) values('memo')", conn)

        Dim retcnt = command.ExecuteNonQuery()
        MessageBox.Show("count = " + CStr(retcnt))

     'パラメータ
        '        command.CommandText = "INSERT INTO tablename (memo) VALUES (@p1)";
        '        command.Parameters.AddWithValue("p1", "Hello");

        '        Dim sResult As String = command.ExecuteScalar()

        MessageBox.Show("追加できました")
        conn.Close()

Continue Reading

VB.net + PostgreSQL + Npgsql DBConnect SELECT Sample

ネット上ではC#でのやり方が多かったのでVB.net版で載せます。

Imports Npgsql '忘れずに

     '接続文字列は適当に変更してください。
        Dim builder As New Npgsql.NpgsqlConnectionStringBuilder
        With builder
            .Host = "192.xxx.xxx.xxx"
            .Database = "dbname"
            .Username = "username"
            .Password = "password"
            .Port = 5432
            .Timeout = 20
        End With

        Dim conn As NpgsqlConnection = New NpgsqlConnection(builder.ConnectionString)
        conn.Open()

        Dim command As NpgsqlCommand = New NpgsqlCommand("select * from test", conn)
        Dim dr As NpgsqlDataReader
        dr = command.ExecuteReader()

        If dr.HasRows Then
            MessageBox.Show("hasrows is true")
        End If

        While (dr.Read())
            MessageBox.Show(dr(0))
        End While

        conn.Close()

Continue Reading

SQLServer stored procedure Sample

SQLServerのストアドプロシージャのサンプルを備忘録として残しておきます。

ALTER PROCEDURE [dbo].[TESTPROC] 

DECLARE @TARGETCOL VARCHAR(100) = 'testvalue'
	   ,@T_SQL		VARCHAR(200) = 'sql ='

BEGIN TRY
begin
	DECLARE @T_CODE VARCHAR(50)
	DECLARE T_CUR CURSOR FOR
		SELECT product_cd  FROM dbo.product
		WHERE product_name = @TARGETCOL

	OPEN T_CUR
	FETCH NEXT FROM T_CUR INTO @T_CODE 

	WHILE @@FETCH_STATUS = 0
		BEGIN
			SET @T_SQL = @T_SQL + @T_CODE
			FETCH NEXT FROM T_CUR INTO @T_CODE
		END

	CLOSE T_CUR
	DEALLOCATE T_CUR
end

	PRINT @T_SQL
END TRY

BEGIN CATCH
	SELECT ERROR_NUMBER() AS エラー番号
		  ,ERROR_SEVERITY() AS エラー重大度
		  ,ERROR_MESSAGE() AS エラーメッセージ
		  ,ERROR_LINE() AS エラー行
END CATCH
Continue Reading

苦手なDB周り – Oracle

ついに仕事でPL/SQLを扱うことになり、勉強中。
新しいことを覚えるのは楽しいけど、覚えるまでは苦痛と感じる日々

Deeplearningで本のデータを読み込ませて脳に学習させるようなことできないもんかね。

意外にCの思想の影響を受けて作られているようだ。
ストアドプログラムを使うとかなりの幅が広がるのは何となく知っていたが、かなりの効果がありそうだ。
早くマスターしなければ。。。。

Continue Reading