web-dev-qa-db-fra.com

Erreur de transaction PyMongo: les numéros de transaction ne sont autorisés que sur un membre de jeu de répliques ou des mongos

Lorsque j'utilise la fonction de transaction pymongo 3.7 pour me connecter au serveur mongo 4.0, cette erreur "Les numéros de transaction ne sont autorisés que sur un membre de jeu de répliques ou des mongos" s'est produite et je ne trouve aucune réponse pour résoudre ce problème. Mon code est:

from pymongo import MongoClient
conn = MongoClient(Host, port)
tb = conn.collector_gateway.try_table
with conn.start_session() as session:
    with session.start_transaction():
        tb.insert_one({"sku": "abc123", "qty": 100}, session=session)

L'erreur est:

Traceback (most recent call last):
  File "/Users/yuzgu/PycharmProjects/seller_loss_alert/try_mongo.py", line 22, in <module>
    tb.insert_one({"sku": "abc123", "qty": 100}, session=session)
  File "/Users/yuzgu/anaconda3/lib/python3.6/site-packages/pymongo/collection.py", line 693, in insert_one
    session=session),
  File "/Users/yuzgu/anaconda3/lib/python3.6/site-packages/pymongo/collection.py", line 607, in _insert
    bypass_doc_val, session)
  File "/Users/yuzgu/anaconda3/lib/python3.6/site-packages/pymongo/collection.py", line 595, in _insert_one
    acknowledged, _insert_command, session)
  File "/Users/yuzgu/anaconda3/lib/python3.6/site-packages/pymongo/mongo_client.py", line 1243, in _retryable_write
    return self._retry_with_session(retryable, func, s, None)
  File "/Users/yuzgu/anaconda3/lib/python3.6/site-packages/pymongo/mongo_client.py", line 1196, in _retry_with_session
    return func(session, sock_info, retryable)
  File "/Users/yuzgu/anaconda3/lib/python3.6/site-packages/pymongo/collection.py", line 590, in _insert_command
    retryable_write=retryable_write)
  File "/Users/yuzgu/anaconda3/lib/python3.6/site-packages/pymongo/pool.py", line 579, in command
    unacknowledged=unacknowledged)
  File "/Users/yuzgu/anaconda3/lib/python3.6/site-packages/pymongo/network.py", line 150, in command
    parse_write_concern_error=parse_write_concern_error)
  File "/Users/yuzgu/anaconda3/lib/python3.6/site-packages/pymongo/helpers.py", line 155, in _check_command_response
    raise OperationFailure(msg % errmsg, code, response)
pymongo.errors.OperationFailure: Transaction numbers are only allowed on a replica set member or mongos

Depuis que la fonction de transaction mongo a été publiée cette année, je n'ai pas trouvé la solution, quelqu'un peut-il m'aider avec ce problème?

9
yuzgu

Les transactions ne sont disponibles que dans une configuration de jeu de réplicas ( https://docs.mongodb.com/master/core/transactions/#transactions-and-replica-sets ):

Les transactions multi-documents sont disponibles uniquement pour les jeux de réplicas.

Ce message d'erreur s'affiche lorsque vous tentez d'effectuer une opération transactionnelle sur une instance mongod autonome.

Veuillez consulter la page Transactions pour plus de détails et exigences.

7
kevinadi