Neo4j Graph Database Fundamentals · Leçon

Gérer les transactions et les sessions

Comprenez comment gérer les transactions et les sessions dans le code de votre application afin d’assurer des interactions robustes et fiables avec la base de données.

Leçon 3 sur 411 étapes

Gérer les transactions et les sessions est une leçon Neo4j Graph Database Fundamentals gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Neo4j Graph Database Fundamentals, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Neo4j Graph Database Fundamentals comprend 4 leçons au total.

Certaines parties de cette leçon n'ont pas encore été traduites et s'affichent en anglais.

Why Transactions Matter

When you update data in a database, especially critical information, you want to ensure the operation is reliable. This is where transactions come in.

Transactions help maintain data integrity and consistency, even if something goes wrong during an operation.

Understanding Transactions

A transaction is a single, logical unit of work. It's a sequence of operations performed as a single atomic operation.

Think of it like transferring money between bank accounts: either both the debit and credit happen, or neither does. You wouldn't want money to leave one account without arriving in another!

The ACID Test

Transactions are often described by their ACID properties:

  • Atomicity: All or nothing. Either the entire transaction succeeds, or none of it does.
  • Consistency: Ensures the database moves from one valid state to another.
  • Isolation: Concurrent transactions don't interfere with each other.
  • Durability: Once a transaction is committed, its changes are permanent.

Connecting with Sessions

In Neo4j, you interact with the database using sessions. A session manages the communication channel and provides methods to execute Cypher queries.

Sessions are lightweight and designed to be opened and closed frequently. They are your primary interface for running queries, including those within transactions.

Basic Session Read

For simple read operations, you often don't need explicit transaction management. The Neo4j driver handles this for you with a read transaction.

Here's how to fetch a node count using a session:

from neo4j import GraphDatabase

URI = "bolt://localhost:7687"
USERNAME = "neo4j"
PASSWORD = "password"

driver = GraphDatabase.driver(URI, auth=(USERNAME, PASSWORD))

def get_node_count(tx):
    result = tx.run("MATCH (n) RETURN count(n) AS count")
    return result.single()["count"]

with driver.session() as session:
    count = session.read_transaction(get_node_count)
    print(f"Total nodes in graph: {count}")

driver.close()

Explicit Write Transactions

For operations that modify the database (like CREATE, MERGE, SET, DELETE), it's best practice to use explicit write transactions. This ensures atomicity.

The write_transaction method automatically handles committing if successful, or rolling back if an error occurs.

from neo4j import GraphDatabase

URI = "bolt://localhost:7687"
USERNAME = "neo4j"
PASSWORD = "password"

driver = GraphDatabase.driver(URI, auth=(USERNAME, PASSWORD))

def create_person(tx, name):
    tx.run("CREATE (p:Person {name: $name})", name=name)
    print(f"Created Person: {name}")

with driver.session() as session:
    session.write_transaction(create_person, "Alice")
    session.write_transaction(create_person, "Bob")

driver.close()

Commit or Rollback?

When using explicit transactions, your changes are not permanently saved until you commit them. If an error occurs, the transaction is rolled back, undoing all changes.

The session.write_transaction() and session.read_transaction() methods handle this implicitly for you. If the function passed to them completes without error, it commits. If an exception is raised, it rolls back.

Robust Error Handling

It's crucial to handle errors within your transaction logic. Any unhandled exception will cause the transaction to roll back, preventing partial updates.

You can use standard Python try...except blocks within your transaction function to manage specific errors or perform cleanup.

from neo4j import GraphDatabase

URI = "bolt://localhost:7687"
USERNAME = "neo4j"
PASSWORD = "password"

driver = GraphDatabase.driver(URI, auth=(USERNAME, PASSWORD))

def create_unique_node(tx, label, name):
    try:
        # Attempt to create a node. For demo, we'll re-raise to show rollback
        tx.run(f"CREATE (n:{label} {{name: $name}})", name=name)
        print(f"Node created: {name}")
    except Exception as e:
        print(f"Error creating node {name}: {e}")
        # Re-raise to trigger rollback for the entire write_transaction
        raise 

with driver.session() as session:
    # First call will likely succeed (unless node exists)
    try:
        session.write_transaction(create_unique_node, "City", "London")
    except Exception:
        print("Transaction for 'London' rolled back due to error.")

    # Second call, intentionally designed to fail for demonstration
    # (e.g., if we had a unique constraint on City.name)
    try:
        # Forcing an error to demonstrate rollback
        def force_error(tx):
            tx.run("CREATE (x)")
            raise ValueError("Simulated error!")
        session.write_transaction(force_error)
    except Exception:
        print("Transaction rolled back due to simulated error.")

driver.close()

Pythonic Context Managers

For even finer-grained control, or when performing multiple operations within a single transaction, you can use the session as a context manager and explicitly manage the transaction object.

The session.begin_transaction() method returns a transaction object that also works as a context manager.

from neo4j import GraphDatabase

URI = "bolt://localhost:7687"
USERNAME = "neo4j"
PASSWORD = "password"

driver = GraphDatabase.driver(URI, auth=(USERNAME, PASSWORD))

with driver.session() as session:
    with session.begin_transaction() as tx:
        tx.run("CREATE (a:Item {id: 1, name: 'Laptop'})")
        tx.run("CREATE (b:Item {id: 2, name: 'Mouse'})")
        # If no error, transaction commits automatically here when 'with tx' block exits
        print("Two items created in one transaction.")

driver.close()

Transaction Challenge

Consider a scenario where you are updating two properties of a single node in Neo4j within a Python application. If the second update fails due to a network error, what should happen to the first update if it was part of the same explicit write transaction?

Recap & Next Steps

We've covered the critical role of transactions in maintaining data integrity and consistency in your Neo4j applications.

  • Transactions follow ACID properties.
  • You use sessions to interact with the database.
  • session.read_transaction() and session.write_transaction() provide convenient, atomic operations.
  • Errors within a transaction lead to an automatic rollback, ensuring no partial data is committed.
  • Context managers offer a Pythonic way to manage sessions and transactions.

Understanding transactions is key to building robust and reliable Neo4j applications!

Gratuit pour commencer

Apprends Neo4j Graph Database Fundamentals avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
12
Leçons
48

Questions Fréquemment Posées

La leçon « Gérer les transactions et les sessions » est-elle gratuite ?

Oui — le texte complet de « Gérer les transactions et les sessions » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Neo4j Graph Database Fundamentals, passe à CoddyKit PRO. Le cours Neo4j Graph Database Fundamentals comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Gérer les transactions et les sessions » ?

Comprenez comment gérer les transactions et les sessions dans le code de votre application afin d’assurer des interactions robustes et fiables avec la base de données. Tu pratiques Neo4j Graph Database Fundamentals avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Neo4j Graph Database Fundamentals ?

Aucune expérience préalable n'est requise. Neo4j Graph Database Fundamentals sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Gérer les transactions et les sessions » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Neo4j Graph Database Fundamentals ?

Oui. Chaque leçon Neo4j Graph Database Fundamentals inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Se connecter avec le pilote Python
  2. Effectuer des opérations CRUD par programmation
  3. Gérer les transactions et les sessions
  4. Regroupement des connexions et gestion des erreurs
← Retour à Neo4j Graph Database Fundamentals