Open3

SQL Server 対応のドライバー回りの整理

nassynassy

pymssql

Python SQL ドライバーでは TDS プロトコルが使用されます。
これは SQL Server と Azure SQL Database で既定で有効になっています。

https://docs.microsoft.com/ja-jp/sql/connect/python/pymssql/step-1-configure-development-environment-for-pymssql-python-development?view=sql-server-ver15

pyodbc が azuread の認証が利用できることを明記されているのに対して、
pymssql に関しては何も記載が無いので、
恐らく azuread の認証はできない。

https://github.com/pymssql/pymssql

nassynassy

pyodbc

pyodbc はいくつかのドライバーをサポートしている。
FreeTDSの併用はMicrosoftの公式サポート外ですが、pyodbcと「ODBC Driver xx for SQL Server」の併用は公式サポートされています。

参考
https://github.com/mkleehammer/pyodbc/wiki/Connecting-to-SQL-Server-from-Linux#os-specific-notes
https://code.google.com/archive/p/pyodbc/wikis/ConnectionStrings.wiki

公式に azure との認証について書かれている
https://docs.microsoft.com/ja-jp/sql/connect/python/pyodbc/step-3-proof-of-concept-connecting-to-sql-using-pyodbc?view=sql-server-ver15#azure-active-directory-and-the-connection-string

pyodbc だけでの接続方法
https://stackoverflow.com/questions/61069715/pyodbc-will-support-connecting-to-an-azure-sql-db-using-the-ad-access-token-inst

pyodbc と sqlalchemy

pyodbc connect を使って接続できた
https://stackoverflow.com/questions/57193301/pass-azure-ad-token-for-azure-sql-db-in-pre-connection-arguments-to-sqlalchemy-c

動的認証トークンの生成

pyodbc.connect エンジンを取得した後、接続が要求されるたびに資格情報を送信する必要があります。これを行う1つの方法は、方言の接続呼び出しにクレデンシャルトークンを追加するイベントリスナーをエンジンに設定することです。これについては、「動的認証トークンの生成」でより一般的に説明されています。特にSQLServerの場合、これはMicrosoftによって記述されたデータ構造を持つODBC接続属性として渡されます。

https://docs.sqlalchemy.org/en/14/dialects/mssql.html#connecting-to-databases-with-access-tokens

プールしているコネクションの1つがタイムアウトしたら、再接続関数を読んでくれるという話だと思うのでパフォーマンスを損なわずに済みそう。(検証の必要あり)

プールもチェックする必要あり -> プールをfalseにしないでねという話だった。
https://docs.sqlalchemy.org/en/14/dialects/mssql.html#pyodbc-pooling-connection-close-behavior