1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Microsoft Azure: Apple Silicon から Python で SQLDatabase へ接続する

Last updated at Posted at 2023-02-22

Apple Silicon から Python で Azure SQLDatabase へ接続する場合、 2023年現在、ちょっと面倒な手続きが必要なので簡単にまとめた。

Environment

  • OS: macOS Monterey Version 12.6
  • Chip: Apple M1 Pro
  • Python 3.10.9

セットアップ手順

Install unixodbc

% brew install unixodbc

Install ODBC Driver

Microsoft のページに書いてあるように ODBC をインストールする。

% /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
% brew tap microsoft/mssql-release https://github.com/Microsoft/homebrew-mssql-release
% brew update
% HOMEBREW_ACCEPT_EULA=Y brew install msodbcsql18 mssql-tools18

(参考: Install the Microsoft ODBC driver for SQL Server (macOS) - Microsoft ODBC 18)

ini の設定もしておく。

% sudo ln -s /usr/local/etc/odbcinst.ini /etc/odbcinst.ini
% sudo ln -s /usr/local/etc/odbc.ini /etc/odbc.ini

(参考: Install the Microsoft ODBC driver for SQL Server (macOS) - Troubleshooting)

Install pyodbc

ここがやや面倒なところで、単純に pip3 install pyodbc とやっても pyodbc がインポートできずにプログラムが終了する。 そのときのエラーは記事の下の方に記載している。

% pip3 install --no-cache-dir --no-binary :all: pyodbc

私の環境ではこれにより pyodbc 4.0.35 がインストールされた。
(2023-06-23 時点で、 最新のもの 4.0.39 だとうまくインストールできなかったというフィードバックがあった。)

接続テスト

import pyodbc

server = 'tcp:xxxxx.database.windows.net'
database = 'xxxxx'
username = 'xxxxx'
password = 'xxxxx'

conn = pyodbc.connect(
    'DRIVER={ODBC Driver 18 for SQL Server};SERVER=' + server + ';DATABASE=' + database + ';UID=' + username + ';PWD=' + password)
cursor = conn.cursor()
cursor.execute("SELECT * FROM table")
for row in cursor:
    print(row)
conn.close()

エラーの例

pyodbc をインポートできなかった場合は、下のようなエラーが出る。

Traceback (most recent call last):
  File "/Users/otsukakenji/tools/util.py", line 2, in <module>
    import pyodbc
ImportError: dlopen(/opt/homebrew/lib/python3.10/site-packages/pyodbc.cpython-310-darwin.so, 0x0002): symbol not found in flat namespace (_SQLAllocHandle)
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?