Docs Menu

Docs Homeアプリケーションの開発Python ドライバーPyMongo

接続ターゲットの選択

項目一覧

  • Overview
  • Atlas
  • ローカル配置
  • レプリカセット
  • 初期化
  • トラブルシューティング
  • サーバーはワイヤバージョン X を報告、PyMongo は Y が必要です
  • AutoReconnect
  • API ドキュメント

このガイドでは、接続string と {0MongoClient オブジェクトを使用して、さまざまなタイプのMongoDB 配置に接続する方法を説明します。

MongoDBAtlas上の 配置に接続するには、 接続string に次の要素を含めます。

  • Atlas クラスターの URL

  • MongoDB ユーザー名

  • MongoDB パスワード

次に、接続stringを MongoClient コンストラクターに渡します。

Tip

接続 Atlasを取得するには、 ドライバー接続ガイドstring に従ってください。

Atlas に接続するときは、Atlas が MongoDB Server の新しいバージョンにアップグレードするときに重大な変更を回避するために、 Stable API クライアント オプションを使用することをお勧めします。 Stable API 機能について詳しくは、「 Stable API 」ページをご覧ください。

以下のコードは、PyMongo を使用して Atlas クラスターに接続する方法を示しています。 このコードでは、Stable API バージョンを指定するためにserver_apiオプションも使用されます。

from pymongo import MongoClient
from pymongo.server_api import ServerApi
# Replace the placeholder with your Atlas connection string
uri = "<connection string>"
# Create a MongoClient with a MongoClientOptions object to set the Stable API version
client = MongoClient(uri, server_api=ServerApi(
version='1', strict=True, deprecation_errors=True))
try:
# Connect the client to the server (optional starting in v4.7)
client.connect()
# Send a ping to confirm a successful connection
client.admin.command({'ping': 1})
print("Pinged your deployment. You successfully connected to MongoDB!")
finally:
# Ensures that the client will close when you finish/error
client.close()

MongoDB のローカル配置に接続するには、ホスト名としてlocalhostを使用します。 デフォルトでは、 mongodプロセスはポート27017で実行されますが、これは配置に合わせてカスタマイズできます。

以下のコードは、PyMongo を使用してローカル MongoDB 配置に接続する方法を示しています。

from pymongo import MongoClient
uri = "mongodb://localhost:27017/"
client = MongoClient(uri)

レプリカセットに接続するには、IP 接続 でレプリカセットのホスト名(またはstring アドレス)とポート番号を指定します。

レプリカセット内のホストの完全なリストを提供できない場合は、レプリカセット内の 1 つ以上のホストを指定し、PyMongo に自動検出を実行して他のホストを検索するように指示できます。 ドライバーに自動検出を実行するように指示するには、次のいずれかのアクションを実行します。

  • replicaSet パラメーターの値としてレプリカセットの名前を指定します。

  • directConnection パラメーターの値として false を指定します。

  • レプリカセットに複数のホストを指定します。

次の例では、ドライバーはサンプル接続 URI を使用して、host1 を含む 3 つの異なるホストのポート 27017 で実行されている MongoDB レプリカセット sampleRS に接続します。

from pymongo import MongoClient
uri = "mongodb://host1:27017/?replicaSet=sampleRS"
client = MongoClient(uri)

注意

MongoClientコンストラクターは非ブロッキングです。 レプリカセットに接続すると、クライアントがバックグラウンド スレッドを使用してレプリカセットに接続している間に、コンストラクターはすぐに返します。

MongoClientを作成し、そのnodes属性の string 表現をすぐに出力すると、クライアントがレプリカセット メンバーに接続している間はリストが空になることがあります。

レプリカセットを初期化するには、単一のノードに直接接続する必要があります。 そのためには、 directConnection接続オプションをTrueに設定します。 これは、MongoClient コンストラクターに引数を渡す方法と、 接続stringのパラメーターを使用する方法の 2 つがあります。

MongoDB Server v 3.4またはそれ以前のバージョンに接続しようとすると、PyMongo は次のエラーを発生させる可能性があります。

pymongo.errors.ConfigurationError: Server at localhost:27017 reports wire version 5, but this version of PyMongo requires at least 6 (MongoDB 3.6).

これは、接続先のサーバーに対してドライバーのバージョンが新しすぎる場合に発生します。 この問題を解決するには、MongoDB の配置を v 3.6以降にアップグレードするか、MongoDB Server v 2.6以降をサポートする PyMongo v 3 .x にダウングレードします。

AutoReconnectの例外は、 フェイルオーバーが発生したことを示します。 これは、PyMongo がレプリカセットの元のプライマリ メンバーへの接続を失い、最後の操作が失敗した可能性があることを意味します。

このエラーが発生すると、PyMongo は自動的に後続の操作のために新しいプライマリ メンバーを検索しようとします。 エラーを処理するには、アプリケーションは次のいずれかのアクションを実行する必要があります。

  • 失敗した可能性のある操作を再試行する

  • 操作が失敗した可能性を認識しながら実行を続行

重要

PyMongo は、レプリカセットが新しいプライマリ メンバーを選出するまで、すべての操作でAutoReconnectエラーを発生させます。

PyMongo でMongoClientオブジェクトを作成する方法の詳細については、次の API ドキュメントを参照してください。

← MongoClient の作成