LinuxからODBCを使用してSQL Serverに接続する方法

完璧なデータベース管理者の世界では、すべてが同じであるはずです。すべてのサーバーは同じであり、同じワークロードを実行します。それらは管理しやすいです。しかし、実際の状況はそうではありません。現在、システム管理者は異なる環境を管理する必要があります。これは、LinuxマシンからSQLクエリを実行する必要性によってより明白です。この記事では、LinuxからSQL Serverに接続する方法について学びます!

LinuxからSQL Serverに接続する方法の一つは、Pythonモジュールを使用することです。しかし、それに先立って、まず作業環境について説明しましょう。

この記事では、Ubuntu 16.04を使用して、SQL Server 2012 R2に接続する方法を説明します。しかし、同じテクニックは他のLinuxバージョンとSQL Serverバージョンにも適用できます。データベース管理者の皆さん、喜びましょう!

前提条件

まず始めに、いくつかの前提条件をインストールする必要があります。まず、PythonからSQL Serverインスタンスに接続するために、Pythonモジュールが必要です。一般的なPythonモジュールであるPyODBCを使用してSQLに接続できます。このモジュールは、Linux用のSQL Server ODBCドライバーを使用してODBCを介してSQLデータベースにクエリを実行することができます。最新バージョンをインストールするには、Pythonパッケージマネージャであるpipを使用します。

> sudo pip install pyodbc

これが機能しない場合は、pipがインストールされていない可能性があります。pipをインストールするには:

> sudo easy_install pip

次に、Pythonスクリプトを作成する必要があります。この場合、sql_server.pyという名前のスクリプトを作成します。Pythonスクリプトを作成するには、まず空のファイルを作成します。

> touch sql_server.py

次に、お好みのエディタを使用して、以下の行を追加してください。シェバングとPythonバイナリへのパスの後に続くものは、このスクリプトがPythonスクリプトであることをインタプリタに伝えるためのものです。その後のimportステートメントは、pyodbcモジュール内のライブラリメソッドを呼び出すことを可能にします。このスクリプトを保存してください。

!/usr/bin/python
import pyodbc

Pythonスクリプトを作成したら、スクリプトを実行します。

> python sql_server.py

エラーなしで実行されれば、pyodbcモジュールは正常にインストールされています。

次に、テストクエリを実行するためのコードを追加します。これを行うために、ODBC文字列を作成します。

ODBC文字列の作成方法については、こちらが参考になります。

ODBC文字列は、含まれる内容に対して厳格です。これを動作させる方法を見つけるのに時間がかかりましたが、以下に私のものを示します。以下のコードでは、ODBC文字列をpyodbcモジュールに含まれるconnect()メソッドの引数として渡しています。

conn = pyodbc.connect('DRIVER={FreeTDS};SERVER=server.domain.local;PORT=1433;UID=DOMAIN\user;PWD=mypassword;DATABASE=mydatabasename;UseNTLMv2=yes;TDS_Version=8.0;Trusted_Domain=domain.local;')

ODBC文字列のほとんどは明らかですが、重要な点としてUIDのためのバックスラッシュの二重化が必要です。ODBC文字列内のバックスラッシュは必ずエスケープするようにしてください。また、使用しているオプションはいくつかの場合によっては省略可能です。

また、SERVERのホスト名を使用するか、SQL ServerのIPアドレスを使用するかは自由です。

SQL Serverに合わせて必要なオプションを追加または削除してください。

次に、T-SQLステートメントを渡すためのカーソルオブジェクトを作成する必要があります。これはcursor()メソッドで行います。

cursor = conn.cursor()

以下のように示される、任意のT-SQL文を渡すために使用できるexecute()メソッドを持つオブジェクトがあります。これにより、結果のデータセットが含まれるrows変数が作成されます。

cursor.execute("SELECT * FROM <tablename>")
rows = cursor.fetchall()

データセットの処理方法を決定する必要があります。結果をCSVファイルに送信したり、別のデータベースに結果を格納したり、コンソールに内容を書き込んだりすることができます。

以下では、データセットが存在する場合に結果をコンソールに出力しています。

if rows:
    print(rows)
Printing SQL rows in Python

コンソールにデータセットが出力されると、出力はあまりきれいではありません。この時点で、データベースからデータをどのようにフォーマットまたは解析するかを決定するのはあなた次第です。難しい部分は終わりました!

次に、以下のようなスクリプトが作成されます:

sql_server.py
!/usr/bin/python import pyodbc conn = pyodbc.connect('DRIVER={FreeTDS};SERVER=server.domain.local;PORT=1433;UID=DOMAIN\user;PWD=mypassword;DATABASE=mydatabasename;UseNTLMv2=yes;TDS_Version=8.0;Trusted_Domain=domain.local;') cursor.execute("SELECT * FROM <tablename>") rows = cursor.fetchall() if rows: print(rows)

概要

このブログ投稿では、Linux上でpyodbc Pythonモジュールを使用してSQL Serverデータソースに接続する方法を学びました。私にとって一番難しい部分はODBC文字列の設定でしたが、一度それを解決すればスムーズに進むはずです。

Linuxから接続できるようになったら、パフォーマンスカウンターを使用してパフォーマンスを向上させることができるか試してみてください。

Source:
https://adamtheautomator.com/connect-to-sql-server-from-linux/