pyodbc + sqlalchemy を使用して SQLServer データベースに接続する際に、次のエラーに遭遇しました: [IM002] [Microsoft][ODBC ドライバー マネージャ] データ ソース名が見つからず、デフォルト ドライバーが指定されていません (0) (SQLDriverConnect)
。
sqlalchemy mssql+pyodbc データベースドキュメント を調べたところ:
ODBC ドライバーをインストールする必要があります。また、ホスト名方式でデータベースに接続する場合は、ドライバー名を指定する必要がありますが、さまざまなドライバーがあり、1 つのドライバーにも異なる名前があることがわかりました。それで、いろいろと調査しました。
どうしてこんなに多くのドライバーがあるのか#
Microsoft SQL Server のドライバーの歴史 - SQL Server | Microsoft Docs の中の非常に明確な説明を引用して再編集します:
Microsoft ODBC Driver for SQL Server には 3 世代の異なるドライバーがあります。
- 第 1 世代の「SQL Server」ODBC ドライバーは、Windows Data Access コンポーネント の一部として提供されています。新しく開発されるプログラムには、このドライバーの使用は推奨されません。
- SQL Server 2005 からは、SQL Server Native Client が ODBC インターフェースを含み、SQL Server 2005 から SQL Server 2012 に付属している ODBC ドライバーです。新しく開発されるプログラムにも、このドライバーの使用は推奨されません。
- SQL Server 2012 以降は、Microsoft ODBC Driver for SQL Server ドライバーが最新のサーバー機能に合わせて更新されます。
SQL Server Native Client#
SQL Server 2005 では、ODBC 接続用の SQL Server Native Client のサポートが導入されました。
SQL Server 2005 から SQL Server 2012 まで、SQL Server Native Client(通常は SNAC と略されます)の開発が行われました。SQL Server Native Client 10.0 は SQL Server 2008 と共にリリースされ、SQL Server Native Client 11.0 は SQL Server 2012 と共にリリースされました。
すべての歴史的バージョンはここからダウンロードできます:Download SQL Server Native Client - ConnectionStrings.com
使用したい場合は、最新バージョンのインストールを見つければ大丈夫です。ドライバーは前方互換性があります。注意が必要なのは、異なる SQLServer バージョンで設定されるドライバー名です:
Driver={SQL Server Native Client}
(SQL Server 2005)Driver={SQL Server Native Client 10.0}
(SQL Server 2008)Driver={SQL Server Native Client 11.0}
(SQL Server 2012 以降)
しかし、Microsoft は 2013 年に新しい ODBC ドライバーを発表しました(https://docs.microsoft.com/zh-cn/archive/blogs/sqlnativeclient/introducing-the-new-microsoft-odbc-drivers-for-sql-server)、つまり以下のものです。2017 年には SNAC の開発を中止し、以下のドライバーに置き換えられました。新しいドライバーは性能が向上し、SQLServer 2012 以降のデータベースの新機能をサポートしています。
Microsoft ODBC Driver for SQL Server#
最新ドライバーのダウンロードリンク | 歴史的バージョンのダウンロードリンク
使用方法は、ドライバーをインストールし、ドライバー名を設定することです。
ドライバー名の形式:
Driver={ODBC Driver XX for SQL Server}
(XX はインストールしたドライバーのバージョン名)
データベース バージョン → ↓ ドライバー バージョン | Azure SQL Database | Azure Synapse Analytics | Azure SQL マネージド インスタンス | SQL Server 2019 | SQL Server 2017 | SQL Server 2016 | SQL Server 2014 | SQL Server 2012 | SQL Server 2008 R2 | SQL Server 2008 | SQL Server 2005 |
---|---|---|---|---|---|---|---|---|---|---|---|
17.6 | はい | はい | はい | はい | はい | はい | はい | はい | |||
17.5 | はい | はい | はい | はい | はい | はい | はい | はい | |||
17.4 | はい | はい | はい | はい | はい | はい | はい | はい | |||
17.3 | はい | はい | はい | はい | はい | はい | はい | はい | はい | はい | |
17.2 | はい | はい | はい | はい | はい | はい | はい | はい | はい | ||
17.1 | はい | はい | はい | はい | はい | はい | はい | はい | はい | ||
17.0 | はい | はい | はい | はい | はい | はい | はい | はい | はい | ||
13.1 | はい | はい | はい | はい | はい | はい | |||||
13 | はい | はい | はい | はい | はい | ||||||
11 | はい | はい | はい | はい | はい |
SQL バージョンの互換性 | 表は Microsoft からのものです
まとめ#
ODBC Driver for SQL Server
は性能が向上しており、新しいバージョンには多くの最適化が施され、新機能もあります。2021 年に開発を行う場合は、これを選ぶべきです。
異なるドライバー バージョンがサポートするデータベース バージョンも異なります。自分の SQLServer バージョンをしっかり確認し、対応するバージョンのドライバーをインストールし、ドライバー名を正しく設定してください。
非常に素晴らしいウェブサイトも見つけました:ConnectionStrings
ConnectionStrings.com は、開発者がソフトウェアをデータに接続するのを助けます。接続文字列に関する直接的なリファレンスであり、接続文字列に関する記事やデータベース接続コンテンツの知識ベース、開発者が互いに解決策を見つけるのを助ける Q&A フォーラムのホストです。
ConnectionStrings.com は開発者がソフトウェアをデータベースに接続するのを助けます。接続文字列に関する直接的なリファレンスであり、データベース接続に関するコンテンツや記事の知識ベース、開発者が互いに解決策を見つけるための Q&A フォーラムを提供しています。