Configurar operações CRUD
Nesta página
Visão geral
Neste guia, você pode aprender como configurar operações de leitura e escrita no PyMongo.
Configurações de leitura e escrita
Você pode controlar como o driver direciona as operações de leitura definindo uma read preference. Você também pode controlar as opções de como o driver aguarda a confirmação das operações de leitura e gravação em um conjunto de réplicas, definindo uma read concern e uma write concern.
Por padrão, os bancos de dados herdam essas configurações da instância MongoClient
e as collections as herdam do banco de dados. No entanto, você pode alterar essas configurações em seu banco de dados ou coleção usando um dos seguintes métodos:
get_database()
: obtém o banco de dados de dados e aplica a preferência de leitura de preocupação de leitura de leitura e a preferência de gravação do cliente.database.with_options()
: Obtém o banco de dados de dados e aplica sua preferência de leitura de preocupação de leitura de leitura e preferência de gravação atuais.get_collection()
: Obtém a coleção e aplica sua preferência de leitura de preocupação de leitura de leitura e preferência de gravação atuais.collection.with_options()
: obtém a coleção e aplica a preferência de leitura de preocupação de leitura de leitura e preferência de leitura do banco de dados.
Para alterar as configurações de leitura ou gravação com os métodos anteriores, chame o método e passe o nome da coleção ou do banco de dados e a nova preferência de leitura, preocupação de leitura ou preferência de gravação.
O exemplo a seguir mostra como alterar a read preference, read concern e write preference de um banco de dados chamado test-database
com o método get_database()
:
client.get_database("test-database", read_preference=ReadPreference.SECONDARY, read_concern="local", write_concern="majority")
O exemplo seguinte mostra como alterar as configurações de leitura e escrita de uma coleção chamada test-collection
com o método get_collection()
:
database.get_collection("test-collection", read_preference=ReadPreference.SECONDARY, read_concern="local", write_concern="majority")
O exemplo seguinte mostra como alterar as configurações de leitura e escrita de uma coleção chamada test-collection
com o método with_options()
:
collection.with_options(read_preference=ReadPreference.SECONDARY, read_concern="local", write_concern="majority")
Dica
Para ver os tipos de preferências de leitura disponíveis no ReadPreference
enum , consulte a documentação da API.
Para saber mais sobre as configurações de leitura e gravação, consulte os seguintes guias no manual do MongoDB Server :
Conjuntos de tags
No MongoDB Server, você pode aplicar marcações de valor-chave a membros do conjunto de réplicas de acordo com qualquer critério de sua escolha. Você pode então usar essas tags para direcionar um ou mais nós para uma operação de leitura.
Por padrão, o PyMongo ignora as tags ao escolher um membro para ler. Para instruir o PyMongo a preferir determinadas tags, passe-as como parâmetro para sua classe de read preference construtor.
No exemplo de código a seguir, o conjunto de tags passado para o parâmetro read_preference
instrui o PyMongo a preferir leituras do centro de dados de Nova York ('dc': 'ny'
) e a voltar para o centro de dados de São Francisco ('dc': 'sf'
):
db = client.get_database( 'test', read_preference=Secondary([{'dc': 'ny'}, {'dc': 'sf'}]))
LocalThreshold
Se vários membros do conjunto de réplicas corresponderem à read preference e aos conjuntos de tags especificados, o PyMongo lerá dos membros do conjunto de réplicas mais próximos, escolhidos de acordo com o tempo de ping.
Por padrão, o driver usa somente os membros cujos tempos de ping estão dentro de 15 milissegundos do membro mais próximo para queries. Para distribuir leituras entre nós com latências mais altas, passe a opção localThresholdMS
para o construtor MongoClient()
.
O exemplo a seguir especifica um limite local de 35 milissegundos:
client = MongoClient(replicaSet='repl0', readPreference=ReadPreference.SECONDARY_PREFERRED, localThresholdMS=35)
No exemplo anterior, o PyMongo distribui leituras entre nós correspondentes dentro de 35 milissegundos do tempo de ping do nó mais próximo.
Observação
O PyMongo ignora o valor de localThresholdMS
ao se comunicar com um conjunto de réplicas por meio de uma instância mongos
. Nesse caso, use a opção de linha de comando localThreshold .
Leituras e gravações retráteis
O PyMongo tenta automaticamente determinadas operações de leitura e gravação uma única vez se elas falharem devido a um erro de rede ou servidor .
Você pode desabilitar explicitamente as leituras ou gravações repetíveis definindo a opção retryReads
ou retryWrites
como False
no construtor MongoClient()
. O exemplo a seguir desativa leituras e gravações repetíveis para um cliente:
client = MongoClient("<connection string>", retryReads=False, retryWrites=False)
Para saber mais sobre as operações de leitura repetível com suporte, consulte Leituras repetíveis no manual do MongoDB Server . Para saber mais sobre as operações de gravações repetíveis com suporte, consulte Retryable writes no manual do MongoDB Server .
Agrupamentos
Ao criar uma coleção, você pode especificar um agrupamento padrão para todas as operações executadas na coleção.
O exemplo a seguir cria a mesma coleção do exemplo anterior, mas com um agrupamento padrão de fr_CA
:
from pymongo.collation import Collation database = client["test_database"] database.create_collection("example_collection", collation=Collation(locale='fr_CA'))