<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Safi</title>
    <description>The latest articles on DEV Community by Safi (@safi50).</description>
    <link>https://dev.to/safi50</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1028263%2Fb79cd689-cea3-4d77-aef8-b3f4f4b99ffa.jpg</url>
      <title>DEV Community: Safi</title>
      <link>https://dev.to/safi50</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/safi50"/>
    <language>en</language>
    <item>
      <title>Empowering Graph Database Operations with Apache AGE Drivers</title>
      <dc:creator>Safi</dc:creator>
      <pubDate>Sat, 03 Jun 2023 13:28:25 +0000</pubDate>
      <link>https://dev.to/safi50/empowering-graph-database-operations-with-apache-age-drivers-54l0</link>
      <guid>https://dev.to/safi50/empowering-graph-database-operations-with-apache-age-drivers-54l0</guid>
      <description>&lt;p&gt;The realm of graph databases has always been about connections and relationships, offering powerful ways to model, store, and query data. Apache AGE has emerged as a powerful tool to incorporate these functionalities into PostgreSQL. AGE extends PostgreSQL's capabilities, allowing it to manage graph data more efficiently and effectively. As AGE builds its repertoire of capabilities, a recent addition of significant note is the development of specific Apache AGE drivers. In this post, we will explore these drivers and discuss their application and potential uses.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache AGE - A Quick Overview
&lt;/h2&gt;

&lt;p&gt;Apache AGE (A Graph Extension) is a PostgreSQL extension that provides graph database functionality. Apache AGE is built around the openCypher query language, enabling users to perform intricate graph operations directly within PostgreSQL.&lt;/p&gt;

&lt;p&gt;AGE provides a seamless graph database experience for PostgreSQL users, enabling them to unlock the potential of graph data management while retaining the robustness, maturity, and extensive SQL capabilities of PostgreSQL.&lt;/p&gt;

&lt;h2&gt;
  
  
  Apache AGE Drivers - The Game Changers
&lt;/h2&gt;

&lt;p&gt;Apache AGE has introduced dedicated drivers to assist developers in integrating AGE functionality with different programming languages. As of my knowledge cutoff in September 2021, Apache AGE provides drivers for three major languages: Java, Python, and JavaScript (Node.js).&lt;/p&gt;

&lt;p&gt;These drivers act as a bridge between the AGE extension in PostgreSQL and the respective programming language. They help developers to write and execute openCypher queries, handle results, and interact with the AGE extension more effectively.&lt;/p&gt;

&lt;p&gt;Here's a brief overview of each driver:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Java Driver for Apache AGE
&lt;/h3&gt;

&lt;p&gt;Java being a widely used language in enterprise application development, the Java driver for Apache AGE opens up opportunities for Java developers to integrate graph database functionalities into their applications. The driver allows developers to connect to an Apache AGE enabled PostgreSQL database, execute openCypher queries, and retrieve results in a more Java-friendly format.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Python Driver for Apache AGE
&lt;/h3&gt;

&lt;p&gt;Python's versatility and ease of use have made it popular in data analysis and scientific computing. With the Python driver for Apache AGE, Python developers and data scientists can now work with AGE to perform graph database operations. This can prove invaluable in areas like network analysis, where graph databases can provide significant benefits.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Node.js Driver for Apache AGE
&lt;/h3&gt;

&lt;p&gt;The Node.js driver brings Apache AGE to the world of JavaScript. Developers can use this driver to integrate Apache AGE functionality into their Node.js applications, enabling them to harness the power of graph databases in building more interconnected and data-rich applications.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making the Most Out of Apache AGE Drivers
&lt;/h2&gt;

&lt;p&gt;With these drivers, the integration of Apache AGE into your applications becomes more straightforward and efficient. You can write openCypher queries directly in your code, execute these queries against your PostgreSQL database with the AGE extension, and handle the results in a manner suited to your programming language.&lt;/p&gt;

&lt;p&gt;For instance, you can design a social media application where you store data in PostgreSQL, using AGE to manage the relationships between different entities (users, posts, comments, etc.). With the appropriate Apache AGE driver, you can easily write and execute queries to analyze these relationships, like finding mutual friends, recommending friends, or even providing post recommendations based on user activity.&lt;/p&gt;

&lt;p&gt;In a different use case, let's say you are building a fraud detection system for financial transactions. With the help of AGE and its drivers, you can store each transaction as a node in the graph and use edges to represent the relationships between different transactions. This setup will enable you to analyze transaction patterns and detect fraudulent activities.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Apache AGE is making strides in bringing graph database capabilities to PostgreSQL, and the addition of these language-specific drivers further amplifies its potential. Developers can now tap into the power of graph databases within the comfort of their preferred programming languages.&lt;/p&gt;

</description>
      <category>apache</category>
      <category>apacheage</category>
      <category>cyph</category>
      <category>driver</category>
    </item>
    <item>
      <title>Leveraging Graph Databases with Apache AGE for Next-Level Data Insights</title>
      <dc:creator>Safi</dc:creator>
      <pubDate>Sat, 03 Jun 2023 13:15:21 +0000</pubDate>
      <link>https://dev.to/safi50/leveraging-graph-databases-with-apache-age-for-next-level-data-insights-13fg</link>
      <guid>https://dev.to/safi50/leveraging-graph-databases-with-apache-age-for-next-level-data-insights-13fg</guid>
      <description>&lt;p&gt;In the evolving landscape of data, graph databases have been increasingly recognized for their unparalleled capabilities in managing, querying, and analyzing highly interconnected data. With an ability to comprehend and traverse relationships among data entities efficiently, graph databases have found profound applications across various domains. One of the promising tools emerging in this space is Apache AGE (incubating), a Graph Extension for PostgreSQL, that extends PostgreSQL's capabilities towards managing graph data. This article seeks to highlight some compelling use cases of graph databases and how Apache AGE can be employed to meet those needs effectively.&lt;/p&gt;

&lt;h2&gt;
  
  
  Graph Databases - A Brief Introduction
&lt;/h2&gt;

&lt;p&gt;Graph databases use graph structures to store, map and query relationships. Unlike traditional relational databases, where data is stored in tabular form, graph databases excel in situations where relationships and connections are of prime importance. Each entity (known as a node) is interconnected with others through relationships (known as edges).&lt;/p&gt;

&lt;p&gt;The real power of graph databases lies in their ability to perform complex queries about relationships in a highly efficient manner, without expensive join operations. This efficiency has led to widespread adoption of graph databases across diverse industries and use cases.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prominent Use Cases of Graph Databases
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Social Networks
&lt;/h3&gt;

&lt;p&gt;Perhaps the most intuitive application of graph databases is in social networks, where users (nodes) are interlinked through relationships such as friends, follows, likes (edges). A graph database allows efficient querying and analysis of the social network to, for example, identify influential users, explore friend-of-friend connections, or detect communities within the network.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Recommendation Engines
&lt;/h3&gt;

&lt;p&gt;E-commerce platforms, streaming services, and more all depend on sophisticated recommendation engines to enhance user engagement. Graph databases can manage product-user relationships effectively, allowing for personalized recommendations based on a user's interaction with other products or the behavior of similar users.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Fraud Detection
&lt;/h3&gt;

&lt;p&gt;In the financial and insurance sectors, graph databases can analyze transactional relationships to detect patterns indicative of fraudulent activity. Unlike traditional databases, graph databases can explore multi-step relationships and identify complex fraud patterns in real-time.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Network &amp;amp; IT Operations
&lt;/h3&gt;

&lt;p&gt;In IT infrastructure management, a graph database can illustrate the network of interconnected devices and systems, allowing for efficient root cause analysis in the event of an issue and proactive management of potential weak points in the network.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Life Sciences and Healthcare
&lt;/h3&gt;

&lt;p&gt;Graph databases enable complex biomedical research by storing and analyzing relationships between various entities like genes, proteins, diseases, and drugs. In healthcare, patient symptoms, conditions, and treatments can be linked to improve diagnostic accuracy and treatment plans.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter Apache AGE - A Graph Extension for PostgreSQL
&lt;/h2&gt;

&lt;p&gt;Apache AGE brings graph database functionality to PostgreSQL, providing an efficient, flexible and user-friendly platform for working with graph data. AGE stands for A Graph Extension, and as the name suggests, it extends the PostgreSQL database to include graph data management capabilities using openCypher, the query language of Neo4j, one of the leading graph databases.&lt;/p&gt;

&lt;p&gt;Apache AGE provides a seamless experience for PostgreSQL users to work with graph data without the need to migrate to a completely different graph database platform. This allows PostgreSQL users to continue leveraging the robustness, maturity, and extensive SQL capabilities of PostgreSQL while adding powerful graph database functionality to their toolkit.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;Apache AGE is an exciting tool that significantly expands the capabilities of PostgreSQL, providing users with powerful graph database functionality. As we've seen, graph databases  can handle a variety of complex use cases, often with greater efficiency and simplicity than traditional relational databases.&lt;/p&gt;

&lt;p&gt;In today's interconnected world, the ability to effectively manage and analyze relational data is key to many industries. As Apache AGE matures and becomes more integrated with PostgreSQL's ecosystem, it will undoubtedly become an even more indispensable tool for anyone dealing with relational data.&lt;/p&gt;

&lt;p&gt;Whether you're already using PostgreSQL or looking for a graph database solution, Apache AGE is worth considering. It combines the power and maturity of PostgreSQL with the flexibility and capability of graph databases, providing the best of both worlds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Relevant Links
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://github.com/apache/age"&gt;Apache AGE GitHub&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;a href="https://age.apache.org/age-manual/master/index.html#"&gt;Apache AGE Documentation&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>apacheage</category>
      <category>cypher</category>
      <category>postgres</category>
    </item>
    <item>
      <title>Understanding Deletion in Apache AGE</title>
      <dc:creator>Safi</dc:creator>
      <pubDate>Fri, 12 May 2023 17:35:33 +0000</pubDate>
      <link>https://dev.to/safi50/understanding-deletion-in-apache-age-2b88</link>
      <guid>https://dev.to/safi50/understanding-deletion-in-apache-age-2b88</guid>
      <description>&lt;p&gt;&lt;strong&gt;Deletion in AGE&lt;/strong&gt; is handled via the &lt;code&gt;DELETE&lt;/code&gt; clause, which is used to delete graph elements - nodes, relationships or paths. This operation is quite critical and understanding how it works will help you maintain the integrity of your graph.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deleting a Single Vertex
&lt;/h2&gt;

&lt;p&gt;To delete a vertex, you can use the &lt;code&gt;DELETE&lt;/code&gt; clause in conjunction with the &lt;code&gt;MATCH&lt;/code&gt; clause to specify which vertex you want to delete. Here's an &lt;strong&gt;example&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * 
FROM cypher('graph_name', $$
    MATCH (v:Useless)
    DELETE v
$$) as (v agtype);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This query will delete the vertex with the label "Useless". But what happens when the &lt;code&gt;MATCH&lt;/code&gt; clause matches multiple vertices?&lt;/p&gt;

&lt;p&gt;In AGE, the &lt;code&gt;DELETE&lt;/code&gt; clause will delete all vertices that match the condition in the &lt;code&gt;MATCH&lt;/code&gt; clause. So, if multiple vertices have the label "Useless", all of them will be deleted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deleting All Vertices and Edges
&lt;/h2&gt;

&lt;p&gt;In some cases, you may want to delete a vertex and all its connected edges. This can be done using the &lt;code&gt;DETACH DELETE&lt;/code&gt; clause.&lt;/p&gt;

&lt;p&gt;Here's an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * 
FROM cypher('graph_name', $$
    MATCH (v:Useless)
    DETACH DELETE v
$$) as (v agtype);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will delete the vertex and all edges connected to it. If multiple vertices match the &lt;code&gt;MATCH&lt;/code&gt; clause, all of them and their associated edges will be deleted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Deleting Edges Only
&lt;/h2&gt;

&lt;p&gt;To delete an edge, use the &lt;code&gt;MATCH&lt;/code&gt; clause to find your edges, then add the variable to the &lt;code&gt;DELETE&lt;/code&gt; clause. Here's an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * 
FROM cypher('graph_name', $$
    MATCH (n {name: 'Andres'})-[r:KNOWS]-&amp;gt;()
    DELETE r
$$) as (v agtype);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This query will delete the edge labeled "KNOWS" that starts from the node named "Andres".&lt;/p&gt;

&lt;h2&gt;
  
  
  Deleting Vertices when an Edge is Deleted
&lt;/h2&gt;

&lt;p&gt;One common question is whether it's possible to add constraints to a graph to automatically delete vertices when an edge is deleted.&lt;/p&gt;

&lt;p&gt;AGE does not support cascading deletes. Deleting an edge will not automatically delete the vertices that it connects. You need to do this manually. Here's how:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT * FROM cypher('graph_name', $$ 
MATCH (a)-[r]-&amp;gt;(b) 
WHERE some_condition_on_r 
DELETE r, a, b
$$) as ( a agtype);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This query will find all pairs of nodes (a, b) that are connected by an edge r that meets some condition, and it will delete r, a, and b. Be aware that this will only delete nodes that are not connected by any other edges. If you want to delete a node regardless of whether it has other edges, you would need to delete those edges first.&lt;/p&gt;

&lt;p&gt;On the other hand, preserving/retaining the vertices associated with a deleted edge is the default behavior in AGE. When you delete an edge, the vertices it was connecting are not affected.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Happens to an Edge When All the Vertices Involved Have Been Deleted?
&lt;/h2&gt;

&lt;p&gt;If you delete a vertex, all edges connected to it are also deleted. Therefore, it's not possible for an edge to exist without its associated vertices. If you delete all vertices involved in an edge, the edge is automatically deleted as well. This is in line with the definition of a graph, where an edge is defined by the nodes it connects.&lt;/p&gt;

&lt;h2&gt;
  
  
  Returning a Deleted Vertex
&lt;/h2&gt;

&lt;p&gt;Interestingly, AGE allows you to return vertices that have been deleted. Here's an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SELECT *
FROM cypher('graph_name', $$
    MATCH (n {name: 'A'})
    DELETE n
    RETURN n
$$) as (a agtype);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This query will delete the vertex with the name 'A' and return it. The returned value will be the vertex as it existed just before deletion.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;In summary, Apache AGE provides comprehensive functionality for deleting vertices and edges in a graph. It's important to remember that deleting a vertex will also delete all edges connected to it, and deleting an edge will not affect the vertices it connects. As always, handle deletion operations with care to maintain the integrity of your graph data.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remember that all changes can be committed or rolled back, providing flexibility and safety. AGE's powerful and flexible deletion operations make it a robust tool for managing graph data in a PostgreSQL database.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're interested in learning more about how to use Apache AGE, check out the &lt;a href="https://age.apache.org/age-manual/master/index.html"&gt;Official Documentation&lt;/a&gt; or their &lt;a href="https://github.com/apache/age"&gt;GitHub&lt;/a&gt; for more detailed information and examples. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Happy graphing!&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>apacheage</category>
      <category>cypher</category>
      <category>apache</category>
      <category>delete</category>
    </item>
    <item>
      <title>Harnessing the Power of Apache AGE with Python: An Overview of the AGE Python</title>
      <dc:creator>Safi</dc:creator>
      <pubDate>Sat, 22 Apr 2023 15:06:18 +0000</pubDate>
      <link>https://dev.to/safi50/harnessing-the-power-of-apache-age-with-python-an-overview-of-the-age-python-5dhh</link>
      <guid>https://dev.to/safi50/harnessing-the-power-of-apache-age-with-python-an-overview-of-the-age-python-5dhh</guid>
      <description>&lt;p&gt;The Apache AGE (A Graph Extension) project is an extension of the PostgreSQL database that provides graph database functionality. AGE is a powerful tool for performing graph-based queries and operations, and in this blog post, we'll explore how the AGE Python driver enables developers to harness this power using the popular Python programming language. We'll cover the driver's dependencies, how it works, and its functionality.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dependencies
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Python 3.6+:&lt;/strong&gt; The AGE Python driver requires Python 3.6 or newer versions, so make sure your Python installation meets this requirement.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;brew install python3 
# or if you already have python installed
brew upgrade python3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;psycopg2:&lt;/strong&gt; This PostgreSQL adapter for Python is essential for connecting to the PostgreSQL database and executing SQL commands. You can install it using pip:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install psycopg2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Apache AGE:&lt;/strong&gt; To use the AGE Python driver, you'll need to have Apache AGE installed and set up within your PostgreSQL database. For detailed instructions on how to do this, consult the official documentation. To use the python driver functionalities, you'll need to install the apache age package for python using:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pip install apache-age-python
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How the AGE Python Driver Works
&lt;/h2&gt;

&lt;p&gt;The AGE Python driver works by leveraging the psycopg2 adapter to connect to a PostgreSQL database with the AGE extension installed. The driver facilitates the execution of AGE-specific graph query languages like openCypher and PGQL, enabling developers to perform graph operations using familiar Python syntax.&lt;/p&gt;

&lt;h2&gt;
  
  
  Functionality
&lt;/h2&gt;

&lt;p&gt;Here are some of the core functionalities offered by the AGE Python driver:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Connecting to the database&lt;/strong&gt;: The driver allows you to establish a connection to your PostgreSQL database, enabling you to execute graph queries.
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import age
conn = age.connect(host="localhost", port="5432", dbname="your_database", user="your_user", password="your_password")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Voila! Now you are utilise Apache Age's functionalities in Python. &lt;br&gt;
You can choose to execute cypher queries on an existing graph or else you can choose to create a new graph using:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;age.create_graph(conn, "your_graph_name")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's an example of how to execute cypher queries in python and handle their output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;with conn.cursor() as cursor:
    try :
         cursor.execute("""SELECT * from cypher(%s, $$ CREATE (n:Person {name: 'Joe', title: 'Developer'}) $$) as (v agtype); """, (GRAPH_NAME,) )
         cursor.execute("""SELECT * from cypher(%s, $$ CREATE (n:Person {name: 'Smith', title: 'Developer'}) $$) as (v agtype); """, (GRAPH_NAME,))
         cursor.execute("""SELECT * from cypher(%s, $$ 
             CREATE (n:Person {name: 'Tom', title: 'Manager'}) 
             RETURN n
             $$) as (v agtype); """, (GRAPH_NAME,))
         for row in cursor:
             print("CREATED::", row[0])

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Make sure to commit your changes when data is inserted or updated.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;conn.commit()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And if an exception occurs while executing the cypher queries, you must rollback your changes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;except Exception as ex:
    print(type(ex), ex)
    conn.rollback()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Happy Coding! &lt;/p&gt;

</description>
      <category>apacheage</category>
      <category>postgres</category>
      <category>ageviewer</category>
      <category>python</category>
    </item>
  </channel>
</rss>
