<!-- CANARY: REQ=REQ-DOCS-001; FEATURE="Docs"; ASPECT=Documentation; STATUS=TESTED; OWNER=docs; UPDATED=2026-01-15 -->
<h2 id="code-examples" class="position-relative d-flex align-items-center group">
<span>Code Examples</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="code-examples"
aria-haspopup="dialog"
aria-label="Share link: Code Examples">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h2><div id="headingShareModal" class="heading-share-modal" role="dialog" aria-modal="true" aria-labelledby="headingShareTitle" hidden>
<div class="hsm-dialog" role="document">
<div class="hsm-header">
<h2 id="headingShareTitle" class="h6 mb-0 fw-bold">Share this section</h2>
<button type="button" class="hsm-close" aria-label="Close">
<i class="fa-solid fa-xmark"></i>
</button>
</div>
<div class="hsm-body">
<label for="headingShareInput" class="form-label small text-muted mb-1 text-uppercase fw-bold" style="font-size: 0.7rem; letter-spacing: 0.5px;">Permalink</label>
<div class="input-group mb-4 hsm-url-group">
<input id="headingShareInput" type="text" class="form-control font-monospace" readonly aria-readonly="true" style="font-size: 0.85rem;" />
<button class="btn btn-primary hsm-copy" type="button" aria-label="Copy" title="Copy">
<i class="fa-duotone fa-clipboard" aria-hidden="true"></i>
</button>
</div>
<div class="small fw-bold mb-2 text-muted text-uppercase" style="font-size: 0.7rem; letter-spacing: 0.5px;">Share via</div>
<div class="hsm-share-grid">
<a id="share-twitter" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-twitter me-2"></i>Twitter
</a>
<a id="share-linkedin" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-linkedin me-2"></i>LinkedIn
</a>
<a id="share-facebook" class="btn btn-outline-secondary w-100" target="_blank" rel="noopener noreferrer">
<i class="fa-brands fa-facebook me-2"></i>Facebook
</a>
</div>
</div>
</div>
</div>
<style>
.heading-share-modal {
position: fixed;
inset: 0;
display: flex;
justify-content: center;
align-items: center;
background: rgba(0, 0, 0, 0.6);
z-index: 1050;
padding: 1rem;
backdrop-filter: blur(4px);
-webkit-backdrop-filter: blur(4px);
}
.heading-share-modal[hidden] { display: none !important; }
.hsm-dialog {
max-width: 420px;
width: 100%;
background: var(--bs-body-bg, #fff);
color: var(--bs-body-color, #212529);
border: 1px solid var(--bs-border-color, rgba(0,0,0,0.1));
border-radius: 1rem;
box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
overflow: hidden;
animation: hsm-fade-in 0.2s ease-out;
}
@keyframes hsm-fade-in {
from { opacity: 0; transform: scale(0.95); }
to { opacity: 1; transform: scale(1); }
}
[data-bs-theme="dark"] .hsm-dialog {
background: #1e293b;
border-color: rgba(255,255,255,0.1);
color: #f8f9fa;
}
.hsm-header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 1rem 1.5rem;
border-bottom: 1px solid var(--bs-border-color, rgba(0,0,0,0.1));
background: rgba(0,0,0,0.02);
}
[data-bs-theme="dark"] .hsm-header {
background: rgba(255,255,255,0.02);
border-color: rgba(255,255,255,0.1);
}
.hsm-close {
background: transparent;
border: none;
color: inherit;
opacity: 0.5;
padding: 0.25rem 0.5rem;
border-radius: 0.25rem;
font-size: 1.2rem;
line-height: 1;
transition: opacity 0.2s;
}
.hsm-close:hover {
opacity: 1;
}
.hsm-body {
padding: 1.5rem;
}
.hsm-url-group {
display: flex !important;
align-items: stretch;
}
.hsm-url-group .form-control {
flex: 1;
min-width: 0;
margin: 0;
background: var(--bs-secondary-bg, #f8f9fa);
border-color: var(--bs-border-color, #dee2e6);
border-top-right-radius: 0;
border-bottom-right-radius: 0;
height: 42px;
}
.hsm-url-group .btn {
flex: 0 0 auto;
margin: 0;
margin-left: -1px;
border-top-left-radius: 0;
border-bottom-left-radius: 0;
height: 42px;
display: flex;
align-items: center;
justify-content: center;
padding: 0 1.25rem;
z-index: 2;
}
[data-bs-theme="dark"] .hsm-url-group .form-control {
background: #0f172a;
border-color: #334155;
color: #e2e8f0;
}
.hsm-share-grid {
display: flex;
flex-direction: column;
gap: 0.5rem;
}
.hsm-share-grid .btn {
display: flex;
align-items: center;
justify-content: center;
font-size: 0.9rem;
padding: 0.6rem;
border-color: var(--bs-border-color);
width: 100%;
}
[data-bs-theme="dark"] .hsm-share-grid .btn {
color: #e2e8f0;
border-color: #475569;
}
[data-bs-theme="dark"] .hsm-share-grid .btn:hover {
background: #334155;
border-color: #cbd5e1;
}
</style>
<script>
(function(){
const modal = document.getElementById('headingShareModal');
if(!modal) return;
const input = modal.querySelector('#headingShareInput');
const copyBtn = modal.querySelector('.hsm-copy');
const twitter = modal.querySelector('#share-twitter');
const linkedin = modal.querySelector('#share-linkedin');
const facebook = modal.querySelector('#share-facebook');
const closeBtn = modal.querySelector('.hsm-close');
let lastFocus=null;
let trapBound=false;
function buildUrl(id){ return window.location.origin + window.location.pathname + '#' + id; }
function isOpen(){ return !modal.hasAttribute('hidden'); }
function hydrate(id){
const url=buildUrl(id);
input.value=url;
const enc=encodeURIComponent(url);
const text=encodeURIComponent(document.title);
if(twitter) twitter.href=`https://twitter.com/intent/tweet?url=${enc}&text=${text}`;
if(linkedin) linkedin.href=`https://www.linkedin.com/sharing/share-offsite/?url=${enc}`;
if(facebook) facebook.href=`https://www.facebook.com/sharer/sharer.php?u=${enc}`;
}
function openModal(id){
lastFocus=document.activeElement;
hydrate(id);
if(!isOpen()){
modal.removeAttribute('hidden');
}
requestAnimationFrame(()=>{ input.focus(); });
trapFocus();
}
function closeModal(){
if(!isOpen()) return;
modal.setAttribute('hidden','');
if(lastFocus && typeof lastFocus.focus==='function') lastFocus.focus();
}
function copyCurrent(){
try{ navigator.clipboard.writeText(input.value).then(()=>feedback(true),()=>fallback()); }
catch(e){ fallback(); }
}
function fallback(){ input.select(); try{ document.execCommand('copy'); feedback(true);}catch(e){ feedback(false);} }
function feedback(ok){ if(!copyBtn) return; const icon=copyBtn.querySelector('i'); if(!icon) return; const prev=copyBtn.getAttribute('data-prev')||icon.className; if(!copyBtn.getAttribute('data-prev')) copyBtn.setAttribute('data-prev',prev); icon.className= ok ? 'fa-duotone fa-clipboard-check':'fa-duotone fa-circle-exclamation'; setTimeout(()=>{ icon.className=prev; },1800); }
function handleShareClick(e){ e.preventDefault(); const btn=e.currentTarget; const id=btn.getAttribute('data-share-target'); if(id) openModal(id); }
function bindShareButtons(){
document.querySelectorAll('.h-share').forEach(btn=>{
if(!btn.dataset.hShareBound){ btn.addEventListener('click', handleShareClick); btn.dataset.hShareBound='1'; }
});
}
bindShareButtons();
if(document.readyState==='loading'){
document.addEventListener('DOMContentLoaded', bindShareButtons);
} else {
requestAnimationFrame(bindShareButtons);
}
document.addEventListener('click', function(e){
const shareBtn=e.target.closest && e.target.closest('.h-share');
if(shareBtn && !shareBtn.dataset.hShareBound){ handleShareClick.call(shareBtn, e); }
}, true);
document.addEventListener('click', e=>{
if(e.target===modal) closeModal();
if(e.target.closest && e.target.closest('.hsm-close')){ e.preventDefault(); closeModal(); }
if(copyBtn && (e.target===copyBtn || (e.target.closest && e.target.closest('.hsm-copy')))) { e.preventDefault(); copyCurrent(); }
});
document.addEventListener('keydown', e=>{ if(e.key==='Escape' && isOpen()) closeModal(); });
function trapFocus(){
if(trapBound) return;
trapBound=true;
modal.addEventListener('keydown', f=>{ if(f.key==='Tab' && isOpen()){ const focusable=[...modal.querySelectorAll('a[href],button,input,textarea,select,[tabindex]:not([tabindex="-1"])')].filter(el=>!el.hasAttribute('disabled')); if(!focusable.length) return; const first=focusable[0]; const last=focusable[focusable.length-1]; if(f.shiftKey && document.activeElement===first){ f.preventDefault(); last.focus(); } else if(!f.shiftKey && document.activeElement===last){ f.preventDefault(); first.focus(); } } });
}
if(closeBtn) closeBtn.addEventListener('click', e=>{ e.preventDefault(); closeModal(); });
})();
</script><p>Code examples provide immediate, practical demonstrations of Geode features through working code snippets. Unlike tutorials that explain concepts step-by-step, examples show you exactly how to accomplish specific tasks with copy-paste-ready code in Python, Go, Rust, and Zig.</p>
<h3 id="why-code-examples-matter" class="position-relative d-flex align-items-center group">
<span>Why Code Examples Matter</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="why-code-examples-matter"
aria-haspopup="dialog"
aria-label="Share link: Why Code Examples Matter">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><p><strong>Immediate Understanding</strong>: See how a feature works in seconds rather than reading lengthy explanations. Examples answer “show me how” more effectively than prose descriptions.</p>
<p><strong>Language-Specific Patterns</strong>: Each language has idiomatic approaches to database integration. Examples demonstrate best practices for your preferred ecosystem—async/await in Python, database/sql in Go, tokio in Rust, or manual memory management in Zig.</p>
<p><strong>Real-World Context</strong>: Examples use realistic scenarios—user authentication, product recommendations, social graphs, fraud detection—helping you understand how features apply to actual problems.</p>
<p><strong>Executable Code</strong>: Every example is tested and runnable. Copy the code into your project and it works, accelerating development from prototype to production.</p>
<h3 id="example-categories" class="position-relative d-flex align-items-center group">
<span>Example Categories</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="example-categories"
aria-haspopup="dialog"
aria-label="Share link: Example Categories">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="basic-crud-operations" class="position-relative d-flex align-items-center group">
<span>Basic CRUD Operations</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="basic-crud-operations"
aria-haspopup="dialog"
aria-label="Share link: Basic CRUD Operations">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p><strong>Creating Nodes</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Python: Create a user node</span>
</span></span><span class="line"><span class="cl"><span class="n">client</span> <span class="o">=</span> <span class="n">Client</span><span class="p">(</span><span class="n">host</span><span class="o">=</span><span class="s2">"localhost"</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="mi">3141</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">with</span> <span class="n">client</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (u:User {
</span></span></span><span class="line"><span class="cl"><span class="s2"> id: $id,
</span></span></span><span class="line"><span class="cl"><span class="s2"> name: $name,
</span></span></span><span class="line"><span class="cl"><span class="s2"> email: $email,
</span></span></span><span class="line"><span class="cl"><span class="s2"> created_at: $timestamp
</span></span></span><span class="line"><span class="cl"><span class="s2"> })
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN u
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="s2">"user123"</span><span class="p">,</span> <span class="n">name</span><span class="o">=</span><span class="s2">"Alice"</span><span class="p">,</span> <span class="n">email</span><span class="o">=</span><span class="s2">"[email protected]"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">timestamp</span><span class="o">=</span><span class="s2">"2025-01-24T10:00:00Z"</span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// Go: Create a product node
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">db</span><span class="p">,</span> <span class="nx">_</span> <span class="o">:=</span> <span class="nx">sql</span><span class="p">.</span><span class="nf">Open</span><span class="p">(</span><span class="s">"geode"</span><span class="p">,</span> <span class="s">"quic://localhost:3141"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nx">result</span><span class="p">,</span> <span class="nx">err</span> <span class="o">:=</span> <span class="nx">db</span><span class="p">.</span><span class="nf">Exec</span><span class="p">(</span><span class="s">`
</span></span></span><span class="line"><span class="cl"><span class="s"> CREATE (p:Product {
</span></span></span><span class="line"><span class="cl"><span class="s"> id: $id,
</span></span></span><span class="line"><span class="cl"><span class="s"> name: $name,
</span></span></span><span class="line"><span class="cl"><span class="s"> price: $price,
</span></span></span><span class="line"><span class="cl"><span class="s"> in_stock: $stock
</span></span></span><span class="line"><span class="cl"><span class="s"> })
</span></span></span><span class="line"><span class="cl"><span class="s">`</span><span class="p">,</span> <span class="nx">sql</span><span class="p">.</span><span class="nf">Named</span><span class="p">(</span><span class="s">"id"</span><span class="p">,</span> <span class="s">"prod456"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">sql</span><span class="p">.</span><span class="nf">Named</span><span class="p">(</span><span class="s">"name"</span><span class="p">,</span> <span class="s">"Widget"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">sql</span><span class="p">.</span><span class="nf">Named</span><span class="p">(</span><span class="s">"price"</span><span class="p">,</span> <span class="mf">29.99</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">sql</span><span class="p">.</span><span class="nf">Named</span><span class="p">(</span><span class="s">"stock"</span><span class="p">,</span> <span class="kc">true</span><span class="p">))</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="c1">// Rust: Create a post node
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">let</span><span class="w"> </span><span class="n">client</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">Client</span>::<span class="n">connect</span><span class="p">(</span><span class="s">"localhost:3141"</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="n">client</span><span class="p">.</span><span class="n">execute</span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">"CREATE (p:Post {id: $id, title: $title, content: $content})"</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="fm">params!</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">"id"</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="s">"post789"</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">"title"</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="s">"Hello Graph"</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">"content"</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="s">"Learning Geode is fun!"</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w">
</span></span></span></code></pre></div><p><strong>Reading Nodes</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Python: Find user by email</span>
</span></span><span class="line"><span class="cl"><span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"MATCH (u:User {email: $email}) RETURN u"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">email</span><span class="o">=</span><span class="s2">"[email protected]"</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="n">user</span> <span class="o">=</span> <span class="k">await</span> <span class="n">result</span><span class="o">.</span><span class="n">first</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Found user: </span><span class="si">{</span><span class="n">user</span><span class="p">[</span><span class="s1">'u'</span><span class="p">][</span><span class="s1">'name'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
</span></span></code></pre></div><p><strong>Updating Properties</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Python: Update user's last login time</span>
</span></span><span class="line"><span class="cl"><span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User {id: $user_id})
</span></span></span><span class="line"><span class="cl"><span class="s2"> SET u.last_login = $timestamp
</span></span></span><span class="line"><span class="cl"><span class="s2">"""</span><span class="p">,</span> <span class="n">user_id</span><span class="o">=</span><span class="s2">"user123"</span><span class="p">,</span> <span class="n">timestamp</span><span class="o">=</span><span class="s2">"2025-01-24T15:30:00Z"</span><span class="p">)</span>
</span></span></code></pre></div><p><strong>Deleting Nodes</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Python: Delete a product and its relationships</span>
</span></span><span class="line"><span class="cl"><span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (p:Product {id: $product_id})
</span></span></span><span class="line"><span class="cl"><span class="s2"> DETACH DELETE p
</span></span></span><span class="line"><span class="cl"><span class="s2">"""</span><span class="p">,</span> <span class="n">product_id</span><span class="o">=</span><span class="s2">"prod456"</span><span class="p">)</span>
</span></span></code></pre></div>
<h4 id="relationship-examples" class="position-relative d-flex align-items-center group">
<span>Relationship Examples</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="relationship-examples"
aria-haspopup="dialog"
aria-label="Share link: Relationship Examples">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p><strong>Creating Relationships</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Python: User follows another user</span>
</span></span><span class="line"><span class="cl"><span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (a:User {id: $follower_id})
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (b:User {id: $followee_id})
</span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (a)-[:FOLLOWS {since: $timestamp}]->(b)
</span></span></span><span class="line"><span class="cl"><span class="s2">"""</span><span class="p">,</span> <span class="n">follower_id</span><span class="o">=</span><span class="s2">"user123"</span><span class="p">,</span> <span class="n">followee_id</span><span class="o">=</span><span class="s2">"user456"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">timestamp</span><span class="o">=</span><span class="s2">"2025-01-24T10:00:00Z"</span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// Go: User purchases product
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">db</span><span class="p">.</span><span class="nf">Exec</span><span class="p">(</span><span class="s">`
</span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (u:User {id: $user_id})
</span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (p:Product {id: $product_id})
</span></span></span><span class="line"><span class="cl"><span class="s"> CREATE (u)-[:PURCHASED {
</span></span></span><span class="line"><span class="cl"><span class="s"> at: $timestamp,
</span></span></span><span class="line"><span class="cl"><span class="s"> quantity: $qty,
</span></span></span><span class="line"><span class="cl"><span class="s"> total: $total
</span></span></span><span class="line"><span class="cl"><span class="s"> }]->(p)
</span></span></span><span class="line"><span class="cl"><span class="s">`</span><span class="p">,</span> <span class="nx">sql</span><span class="p">.</span><span class="nf">Named</span><span class="p">(</span><span class="s">"user_id"</span><span class="p">,</span> <span class="s">"user123"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">sql</span><span class="p">.</span><span class="nf">Named</span><span class="p">(</span><span class="s">"product_id"</span><span class="p">,</span> <span class="s">"prod456"</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">sql</span><span class="p">.</span><span class="nf">Named</span><span class="p">(</span><span class="s">"timestamp"</span><span class="p">,</span> <span class="nx">time</span><span class="p">.</span><span class="nf">Now</span><span class="p">()),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">sql</span><span class="p">.</span><span class="nf">Named</span><span class="p">(</span><span class="s">"qty"</span><span class="p">,</span> <span class="mi">2</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">sql</span><span class="p">.</span><span class="nf">Named</span><span class="p">(</span><span class="s">"total"</span><span class="p">,</span> <span class="mf">59.98</span><span class="p">))</span>
</span></span></code></pre></div><p><strong>Querying Relationships</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Python: Find all products a user purchased</span>
</span></span><span class="line"><span class="cl"><span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User {id: $user_id})-[r:PURCHASED]->(p:Product)
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN p.name, r.quantity, r.total, r.at
</span></span></span><span class="line"><span class="cl"><span class="s2"> ORDER BY r.at DESC
</span></span></span><span class="line"><span class="cl"><span class="s2">"""</span><span class="p">,</span> <span class="n">user_id</span><span class="o">=</span><span class="s2">"user123"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">rows</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">row</span><span class="p">[</span><span class="s1">'p.name'</span><span class="p">]</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">row</span><span class="p">[</span><span class="s1">'r.quantity'</span><span class="p">]</span><span class="si">}</span><span class="s2"> @ $</span><span class="si">{</span><span class="n">row</span><span class="p">[</span><span class="s1">'r.total'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
</span></span></code></pre></div>
<h4 id="pattern-matching-examples" class="position-relative d-flex align-items-center group">
<span>Pattern Matching Examples</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="pattern-matching-examples"
aria-haspopup="dialog"
aria-label="Share link: Pattern Matching Examples">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p><strong>Multi-Hop Traversals</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Python: Friends of friends (2 degrees of separation)</span>
</span></span><span class="line"><span class="cl"><span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (me:User {id: $my_id})-[:FRIENDS*2]->(friend_of_friend)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE NOT EXISTS {
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (me)-[:FRIENDS]->(friend_of_friend)
</span></span></span><span class="line"><span class="cl"><span class="s2"> }
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN DISTINCT friend_of_friend.name, friend_of_friend.email
</span></span></span><span class="line"><span class="cl"><span class="s2"> LIMIT 10
</span></span></span><span class="line"><span class="cl"><span class="s2">"""</span><span class="p">,</span> <span class="n">my_id</span><span class="o">=</span><span class="s2">"user123"</span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="c1">// Rust: Product recommendation via similarity
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">let</span><span class="w"> </span><span class="n">results</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">client</span><span class="p">.</span><span class="n">execute</span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sa">r</span><span class="s">#"
</span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (u:User {id: $user_id})-[:PURCHASED]->(p:Product)
</span></span></span><span class="line"><span class="cl"><span class="s"> -[:SIMILAR_TO]->(rec:Product)
</span></span></span><span class="line"><span class="cl"><span class="s"> WHERE NOT EXISTS {
</span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (u)-[:PURCHASED]->(rec)
</span></span></span><span class="line"><span class="cl"><span class="s"> }
</span></span></span><span class="line"><span class="cl"><span class="s"> RETURN rec.name, rec.price, COUNT(*) as relevance
</span></span></span><span class="line"><span class="cl"><span class="s"> ORDER BY relevance DESC
</span></span></span><span class="line"><span class="cl"><span class="s"> LIMIT 5
</span></span></span><span class="line"><span class="cl"><span class="s"> "#</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="fm">params!</span><span class="w"> </span><span class="p">{</span><span class="w"> </span><span class="s">"user_id"</span><span class="w"> </span><span class="o">=></span><span class="w"> </span><span class="s">"user123"</span><span class="w"> </span><span class="p">}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w">
</span></span></span></code></pre></div><p><strong>Optional Patterns</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Python: Users with optional profile pictures</span>
</span></span><span class="line"><span class="cl"><span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User)
</span></span></span><span class="line"><span class="cl"><span class="s2"> OPTIONAL MATCH (u)-[:HAS_AVATAR]->(img:Image)
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN u.name, u.email, img.url
</span></span></span><span class="line"><span class="cl"><span class="s2">"""</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">for</span> <span class="n">row</span> <span class="ow">in</span> <span class="n">result</span><span class="o">.</span><span class="n">rows</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">avatar</span> <span class="o">=</span> <span class="n">row</span><span class="p">[</span><span class="s1">'img.url'</span><span class="p">]</span> <span class="k">if</span> <span class="n">row</span><span class="p">[</span><span class="s1">'img.url'</span><span class="p">]</span> <span class="k">else</span> <span class="s2">"default.png"</span>
</span></span><span class="line"><span class="cl"> <span class="nb">print</span><span class="p">(</span><span class="sa">f</span><span class="s2">"</span><span class="si">{</span><span class="n">row</span><span class="p">[</span><span class="s1">'u.name'</span><span class="p">]</span><span class="si">}</span><span class="s2">: </span><span class="si">{</span><span class="n">avatar</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
</span></span></code></pre></div>
<h4 id="transaction-examples" class="position-relative d-flex align-items-center group">
<span>Transaction Examples</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="transaction-examples"
aria-haspopup="dialog"
aria-label="Share link: Transaction Examples">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p><strong>Basic Transaction</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Python: Transfer credits between users atomically</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">with</span> <span class="n">client</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">tx</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">tx</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Deduct from sender</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">tx</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (sender:User {id: $sender_id})
</span></span></span><span class="line"><span class="cl"><span class="s2"> SET sender.credits = sender.credits - $amount
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="n">sender_id</span><span class="o">=</span><span class="s2">"user123"</span><span class="p">,</span> <span class="n">amount</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Add to receiver</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">tx</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (receiver:User {id: $receiver_id})
</span></span></span><span class="line"><span class="cl"><span class="s2"> SET receiver.credits = receiver.credits + $amount
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="n">receiver_id</span><span class="o">=</span><span class="s2">"user456"</span><span class="p">,</span> <span class="n">amount</span><span class="o">=</span><span class="mi">100</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Both operations succeed or both fail</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// Go: Multi-step order creation with rollback
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">tx</span><span class="p">,</span> <span class="nx">_</span> <span class="o">:=</span> <span class="nx">db</span><span class="p">.</span><span class="nf">Begin</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"><span class="k">defer</span> <span class="kd">func</span><span class="p">()</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="nx">r</span> <span class="o">:=</span> <span class="nb">recover</span><span class="p">();</span> <span class="nx">r</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">tx</span><span class="p">.</span><span class="nf">Rollback</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"> <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Create order
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">tx</span><span class="p">.</span><span class="nf">Exec</span><span class="p">(</span><span class="s">`CREATE (o:Order {id: $id, user_id: $user_id, total: $total})`</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nx">sql</span><span class="p">.</span><span class="nf">Named</span><span class="p">(</span><span class="s">"id"</span><span class="p">,</span> <span class="nx">orderID</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">sql</span><span class="p">.</span><span class="nf">Named</span><span class="p">(</span><span class="s">"user_id"</span><span class="p">,</span> <span class="nx">userID</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">sql</span><span class="p">.</span><span class="nf">Named</span><span class="p">(</span><span class="s">"total"</span><span class="p">,</span> <span class="nx">total</span><span class="p">))</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Add order items
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="k">for</span> <span class="nx">_</span><span class="p">,</span> <span class="nx">item</span> <span class="o">:=</span> <span class="k">range</span> <span class="nx">items</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="nx">tx</span><span class="p">.</span><span class="nf">Exec</span><span class="p">(</span><span class="s">`
</span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (o:Order {id: $order_id})
</span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (p:Product {id: $product_id})
</span></span></span><span class="line"><span class="cl"><span class="s"> CREATE (o)-[:CONTAINS {quantity: $qty}]->(p)
</span></span></span><span class="line"><span class="cl"><span class="s"> `</span><span class="p">,</span> <span class="nx">sql</span><span class="p">.</span><span class="nf">Named</span><span class="p">(</span><span class="s">"order_id"</span><span class="p">,</span> <span class="nx">orderID</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">sql</span><span class="p">.</span><span class="nf">Named</span><span class="p">(</span><span class="s">"product_id"</span><span class="p">,</span> <span class="nx">item</span><span class="p">.</span><span class="nx">ProductID</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="nx">sql</span><span class="p">.</span><span class="nf">Named</span><span class="p">(</span><span class="s">"qty"</span><span class="p">,</span> <span class="nx">item</span><span class="p">.</span><span class="nx">Quantity</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">tx</span><span class="p">.</span><span class="nf">Commit</span><span class="p">()</span>
</span></span></code></pre></div><p><strong>Savepoints</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Python: Complex operation with partial rollback</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">with</span> <span class="n">client</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">tx</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">tx</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">tx</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"CREATE (u:User {id: 'temp1', name: 'Test'})"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="n">savepoint</span> <span class="o">=</span> <span class="k">await</span> <span class="n">tx</span><span class="o">.</span><span class="n">savepoint</span><span class="p">(</span><span class="s2">"before_optional"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Risky operation that might fail</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">tx</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"CREATE (u:User {id: 'temp1'})"</span><span class="p">)</span> <span class="c1"># Duplicate!</span>
</span></span><span class="line"><span class="cl"> <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Roll back to savepoint, keep first user</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">tx</span><span class="o">.</span><span class="n">rollback_to</span><span class="p">(</span><span class="n">savepoint</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">tx</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"CREATE (u:User {id: 'temp2', name: 'Test2'})"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Commits temp1 and temp2, but not the duplicate attempt</span>
</span></span></code></pre></div>
<h4 id="aggregation-examples" class="position-relative d-flex align-items-center group">
<span>Aggregation Examples</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="aggregation-examples"
aria-haspopup="dialog"
aria-label="Share link: Aggregation Examples">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Python: Count users by country</span>
</span></span><span class="line"><span class="cl"><span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User)
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN u.country, COUNT(*) as user_count
</span></span></span><span class="line"><span class="cl"><span class="s2"> ORDER BY user_count DESC
</span></span></span><span class="line"><span class="cl"><span class="s2">"""</span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// Go: Average order value by month
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">rows</span><span class="p">,</span> <span class="nx">_</span> <span class="o">:=</span> <span class="nx">db</span><span class="p">.</span><span class="nf">Query</span><span class="p">(</span><span class="s">`
</span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (o:Order)
</span></span></span><span class="line"><span class="cl"><span class="s"> RETURN
</span></span></span><span class="line"><span class="cl"><span class="s"> substring(o.created_at, 0, 7) as month,
</span></span></span><span class="line"><span class="cl"><span class="s"> AVG(o.total) as avg_value,
</span></span></span><span class="line"><span class="cl"><span class="s"> SUM(o.total) as total_revenue,
</span></span></span><span class="line"><span class="cl"><span class="s"> COUNT(*) as order_count
</span></span></span><span class="line"><span class="cl"><span class="s"> ORDER BY month DESC
</span></span></span><span class="line"><span class="cl"><span class="s">`</span><span class="p">)</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="c1">// Rust: Top products by revenue
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">let</span><span class="w"> </span><span class="n">results</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">client</span><span class="p">.</span><span class="n">execute</span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="sa">r</span><span class="s">#"
</span></span></span><span class="line"><span class="cl"><span class="s"> MATCH (o:Order)-[c:CONTAINS]->(p:Product)
</span></span></span><span class="line"><span class="cl"><span class="s"> RETURN
</span></span></span><span class="line"><span class="cl"><span class="s"> p.name,
</span></span></span><span class="line"><span class="cl"><span class="s"> SUM(c.quantity) as units_sold,
</span></span></span><span class="line"><span class="cl"><span class="s"> SUM(c.quantity * p.price) as revenue
</span></span></span><span class="line"><span class="cl"><span class="s"> ORDER BY revenue DESC
</span></span></span><span class="line"><span class="cl"><span class="s"> LIMIT 10
</span></span></span><span class="line"><span class="cl"><span class="s"> "#</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="fm">params!</span><span class="w"> </span><span class="p">{}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="advanced-query-examples" class="position-relative d-flex align-items-center group">
<span>Advanced Query Examples</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="advanced-query-examples"
aria-haspopup="dialog"
aria-label="Share link: Advanced Query Examples">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p><strong>Subqueries</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Python: Users who purchased all items in a category</span>
</span></span><span class="line"><span class="cl"><span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (category:Category {name: $category_name})<-[:IN_CATEGORY]-(p:Product)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH category, COUNT(p) as total_products
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE EXISTS {
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u)-[:PURCHASED]->(p2:Product)-[:IN_CATEGORY]->(category)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH category, COUNT(DISTINCT p2) as user_purchased
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE user_purchased = total_products
</span></span></span><span class="line"><span class="cl"><span class="s2"> }
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN u.name, u.email
</span></span></span><span class="line"><span class="cl"><span class="s2">"""</span><span class="p">,</span> <span class="n">category_name</span><span class="o">=</span><span class="s2">"Electronics"</span><span class="p">)</span>
</span></span></code></pre></div><p><strong>Shortest Path</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Python: Find shortest connection between two users</span>
</span></span><span class="line"><span class="cl"><span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH path = shortestPath(
</span></span></span><span class="line"><span class="cl"><span class="s2"> (a:User {id: $user_a})-[:KNOWS*]-(b:User {id: $user_b})
</span></span></span><span class="line"><span class="cl"><span class="s2"> )
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN [node IN nodes(path) | node.name] as connection_path,
</span></span></span><span class="line"><span class="cl"><span class="s2"> length(path) as degrees_of_separation
</span></span></span><span class="line"><span class="cl"><span class="s2">"""</span><span class="p">,</span> <span class="n">user_a</span><span class="o">=</span><span class="s2">"user123"</span><span class="p">,</span> <span class="n">user_b</span><span class="o">=</span><span class="s2">"user789"</span><span class="p">)</span>
</span></span></code></pre></div>
<h4 id="client-specific-patterns" class="position-relative d-flex align-items-center group">
<span>Client-Specific Patterns</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="client-specific-patterns"
aria-haspopup="dialog"
aria-label="Share link: Client-Specific Patterns">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p><strong>Python Async Patterns</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Concurrent queries with asyncio</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">asyncio</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">fetch_user_data</span><span class="p">(</span><span class="n">user_id</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="n">client</span> <span class="o">=</span> <span class="n">Client</span><span class="p">(</span><span class="n">host</span><span class="o">=</span><span class="s2">"localhost"</span><span class="p">,</span> <span class="n">port</span><span class="o">=</span><span class="mi">3141</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="n">client</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">user</span><span class="p">,</span> <span class="n">posts</span><span class="p">,</span> <span class="n">friends</span> <span class="o">=</span> <span class="k">await</span> <span class="n">asyncio</span><span class="o">.</span><span class="n">gather</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"MATCH (u:User {id: $id}) RETURN u"</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="n">user_id</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"MATCH (u:User {id: $id})-[:WROTE]->(p) RETURN p"</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="n">user_id</span><span class="p">),</span>
</span></span><span class="line"><span class="cl"> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"MATCH (u:User {id: $id})-[:FRIENDS]->(f) RETURN f"</span><span class="p">,</span> <span class="nb">id</span><span class="o">=</span><span class="n">user_id</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">user</span><span class="p">,</span> <span class="n">posts</span><span class="p">,</span> <span class="n">friends</span>
</span></span></code></pre></div><p><strong>Go Connection Pooling</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// Configure connection pool
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">db</span><span class="p">,</span> <span class="nx">_</span> <span class="o">:=</span> <span class="nx">sql</span><span class="p">.</span><span class="nf">Open</span><span class="p">(</span><span class="s">"geode"</span><span class="p">,</span> <span class="s">"quic://localhost:3141"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nx">db</span><span class="p">.</span><span class="nf">SetMaxOpenConns</span><span class="p">(</span><span class="mi">100</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nx">db</span><span class="p">.</span><span class="nf">SetMaxIdleConns</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="nx">db</span><span class="p">.</span><span class="nf">SetConnMaxLifetime</span><span class="p">(</span><span class="nx">time</span><span class="p">.</span><span class="nx">Hour</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1">// Use connection from pool
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">ctx</span><span class="p">,</span> <span class="nx">cancel</span> <span class="o">:=</span> <span class="nx">context</span><span class="p">.</span><span class="nf">WithTimeout</span><span class="p">(</span><span class="nx">context</span><span class="p">.</span><span class="nf">Background</span><span class="p">(),</span> <span class="mi">5</span><span class="o">*</span><span class="nx">time</span><span class="p">.</span><span class="nx">Second</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">defer</span> <span class="nf">cancel</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nx">row</span> <span class="o">:=</span> <span class="nx">db</span><span class="p">.</span><span class="nf">QueryRowContext</span><span class="p">(</span><span class="nx">ctx</span><span class="p">,</span> <span class="s">"MATCH (u:User {id: $id}) RETURN u"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="nx">sql</span><span class="p">.</span><span class="nf">Named</span><span class="p">(</span><span class="s">"id"</span><span class="p">,</span> <span class="s">"user123"</span><span class="p">))</span>
</span></span></code></pre></div><p><strong>Rust Stream Processing</strong>:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-rust" data-lang="rust"><span class="line"><span class="cl"><span class="c1">// Process large result sets efficiently
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="kd">let</span><span class="w"> </span><span class="k">mut</span><span class="w"> </span><span class="n">stream</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">client</span><span class="p">.</span><span class="n">execute</span><span class="p">(</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="s">"MATCH (u:User) WHERE u.active = true RETURN u"</span><span class="p">,</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="fm">params!</span><span class="w"> </span><span class="p">{}</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">).</span><span class="n">stream</span><span class="p">().</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="k">while</span><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="nb">Some</span><span class="p">(</span><span class="n">row</span><span class="p">)</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">stream</span><span class="p">.</span><span class="n">next</span><span class="p">().</span><span class="k">await</span><span class="w"> </span><span class="p">{</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">user_id</span>: <span class="nb">String</span> <span class="o">=</span><span class="w"> </span><span class="n">row</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="s">"u.id"</span><span class="p">)</span><span class="o">?</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="kd">let</span><span class="w"> </span><span class="n">user_name</span>: <span class="nb">String</span> <span class="o">=</span><span class="w"> </span><span class="n">row</span><span class="p">.</span><span class="n">get</span><span class="p">(</span><span class="s">"u.name"</span><span class="p">)</span><span class="o">?</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"> </span><span class="c1">// Process each user without loading entire result set into memory
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="w"> </span><span class="n">process_user</span><span class="p">(</span><span class="n">user_id</span><span class="p">,</span><span class="w"> </span><span class="n">user_name</span><span class="p">).</span><span class="k">await</span><span class="o">?</span><span class="p">;</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w"></span><span class="p">}</span><span class="w">
</span></span></span></code></pre></div>
<h4 id="error-handling-examples" class="position-relative d-flex align-items-center group">
<span>Error Handling Examples</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="error-handling-examples"
aria-haspopup="dialog"
aria-label="Share link: Error Handling Examples">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># Python: Retry logic for transient failures</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">tenacity</span> <span class="kn">import</span> <span class="n">retry</span><span class="p">,</span> <span class="n">stop_after_attempt</span><span class="p">,</span> <span class="n">wait_exponential</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">geode_client</span> <span class="kn">import</span> <span class="n">QueryError</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nd">@retry</span><span class="p">(</span><span class="n">stop</span><span class="o">=</span><span class="n">stop_after_attempt</span><span class="p">(</span><span class="mi">3</span><span class="p">),</span> <span class="n">wait</span><span class="o">=</span><span class="n">wait_exponential</span><span class="p">(</span><span class="n">multiplier</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="nb">min</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> <span class="nb">max</span><span class="o">=</span><span class="mi">10</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">execute_with_retry</span><span class="p">(</span><span class="n">client</span><span class="p">,</span> <span class="n">query</span><span class="p">,</span> <span class="o">**</span><span class="n">params</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="n">query</span><span class="p">,</span> <span class="n">params</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">result</span>
</span></span><span class="line"><span class="cl"> <span class="k">except</span> <span class="n">QueryError</span> <span class="k">as</span> <span class="n">exc</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">message</span> <span class="o">=</span> <span class="nb">str</span><span class="p">(</span><span class="n">exc</span><span class="p">)</span><span class="o">.</span><span class="n">lower</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="s2">"40502"</span> <span class="ow">in</span> <span class="n">message</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Let retry decorator handle conflicts</span>
</span></span><span class="line"><span class="cl"> <span class="k">raise</span>
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="s2">"syntax"</span> <span class="ow">in</span> <span class="n">message</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">logger</span><span class="o">.</span><span class="n">error</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Non-retryable error: </span><span class="si">{</span><span class="n">exc</span><span class="si">}</span><span class="s2">"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">raise</span>
</span></span><span class="line"><span class="cl"> <span class="k">raise</span>
</span></span></code></pre></div><div class="highlight"><pre tabindex="0" class="chroma"><code class="language-go" data-lang="go"><span class="line"><span class="cl"><span class="c1">// Go: Graceful error handling
</span></span></span><span class="line"><span class="cl"><span class="c1"></span><span class="nx">row</span> <span class="o">:=</span> <span class="nx">db</span><span class="p">.</span><span class="nf">QueryRow</span><span class="p">(</span><span class="s">"MATCH (u:User {id: $id}) RETURN u"</span><span class="p">,</span> <span class="nx">sql</span><span class="p">.</span><span class="nf">Named</span><span class="p">(</span><span class="s">"id"</span><span class="p">,</span> <span class="nx">userID</span><span class="p">))</span>
</span></span><span class="line"><span class="cl"><span class="kd">var</span> <span class="nx">user</span> <span class="nx">User</span>
</span></span><span class="line"><span class="cl"><span class="nx">err</span> <span class="o">:=</span> <span class="nx">row</span><span class="p">.</span><span class="nf">Scan</span><span class="p">(</span><span class="o">&</span><span class="nx">user</span><span class="p">.</span><span class="nx">ID</span><span class="p">,</span> <span class="o">&</span><span class="nx">user</span><span class="p">.</span><span class="nx">Name</span><span class="p">,</span> <span class="o">&</span><span class="nx">user</span><span class="p">.</span><span class="nx">Email</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">if</span> <span class="nx">err</span> <span class="o">==</span> <span class="nx">sql</span><span class="p">.</span><span class="nx">ErrNoRows</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="c1">// User not found - expected case
</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="nx">ErrUserNotFound</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span> <span class="k">else</span> <span class="k">if</span> <span class="nx">err</span> <span class="o">!=</span> <span class="kc">nil</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="c1">// Unexpected database error
</span></span></span><span class="line"><span class="cl"><span class="c1"></span> <span class="nx">log</span><span class="p">.</span><span class="nf">Printf</span><span class="p">(</span><span class="s">"Database error: %v"</span><span class="p">,</span> <span class="nx">err</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="kc">nil</span><span class="p">,</span> <span class="nx">err</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span>
</span></span></code></pre></div>
<h3 id="related-topics" class="position-relative d-flex align-items-center group">
<span>Related Topics</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="related-topics"
aria-haspopup="dialog"
aria-label="Share link: Related Topics">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3><ul>
<li><strong>Tutorials</strong>: Step-by-step learning paths with explanations</li>
<li><strong>Guides</strong>: Architectural patterns and design principles</li>
<li><strong>Getting Started</strong>: Quick examples for beginners</li>
<li><strong>Developer Guide</strong>: Complete API reference and documentation</li>
</ul>
<h3 id="production-code-examples" class="position-relative d-flex align-items-center group">
<span>Production Code Examples</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="production-code-examples"
aria-haspopup="dialog"
aria-label="Share link: Production Code Examples">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h3>
<h4 id="full-stack-application-integration" class="position-relative d-flex align-items-center group">
<span>Full-Stack Application Integration</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="full-stack-application-integration"
aria-haspopup="dialog"
aria-label="Share link: Full-Stack Application Integration">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Complete application with Geode backend:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="c1"># FastAPI application with Geode</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">fastapi</span> <span class="kn">import</span> <span class="n">FastAPI</span><span class="p">,</span> <span class="n">HTTPException</span><span class="p">,</span> <span class="n">Depends</span><span class="p">,</span> <span class="n">Header</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">geode_client</span> <span class="kn">import</span> <span class="n">Client</span>
</span></span><span class="line"><span class="cl"><span class="kn">from</span> <span class="nn">pydantic</span> <span class="kn">import</span> <span class="n">BaseModel</span><span class="p">,</span> <span class="n">EmailStr</span>
</span></span><span class="line"><span class="cl"><span class="kn">import</span> <span class="nn">asyncio</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="n">app</span> <span class="o">=</span> <span class="n">FastAPI</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="c1"># Connection pool (reused across requests)</span>
</span></span><span class="line"><span class="cl"><span class="n">geode_pool</span> <span class="o">=</span> <span class="n">Client</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"localhost:3141"</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">pool_size</span><span class="o">=</span><span class="mi">20</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">pool_timeout</span><span class="o">=</span><span class="mf">30.0</span>
</span></span><span class="line"><span class="cl"><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">UserRegistration</span><span class="p">(</span><span class="n">BaseModel</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span>
</span></span><span class="line"><span class="cl"> <span class="n">email</span><span class="p">:</span> <span class="n">EmailStr</span>
</span></span><span class="line"><span class="cl"> <span class="n">password</span><span class="p">:</span> <span class="nb">str</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nd">@app.on_event</span><span class="p">(</span><span class="s2">"startup"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">startup</span><span class="p">():</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Initialize database connection"""</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">geode_pool</span><span class="o">.</span><span class="n">connect</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nd">@app.on_event</span><span class="p">(</span><span class="s2">"shutdown"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">shutdown</span><span class="p">():</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Close database connection"""</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">geode_pool</span><span class="o">.</span><span class="n">close</span><span class="p">()</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">get_current_user</span><span class="p">(</span><span class="n">authorization</span><span class="p">:</span> <span class="nb">str</span> <span class="o">=</span> <span class="n">Header</span><span class="p">(</span><span class="o">...</span><span class="p">)):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Dependency: Extract user from JWT token"""</span>
</span></span><span class="line"><span class="cl"> <span class="n">token</span> <span class="o">=</span> <span class="n">authorization</span><span class="o">.</span><span class="n">replace</span><span class="p">(</span><span class="s2">"Bearer "</span><span class="p">,</span> <span class="s2">""</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="n">user_id</span> <span class="o">=</span> <span class="n">decode_jwt</span><span class="p">(</span><span class="n">token</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">geode_pool</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User {id: $id})
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN u
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span><span class="s2">"id"</span><span class="p">:</span> <span class="n">user_id</span><span class="p">})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="mi">401</span><span class="p">,</span> <span class="s2">"Invalid token"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">result</span><span class="o">.</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s1">'u'</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nd">@app.post</span><span class="p">(</span><span class="s2">"/api/register"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">register</span><span class="p">(</span><span class="n">user</span><span class="p">:</span> <span class="n">UserRegistration</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Register new user"""</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Hash password</span>
</span></span><span class="line"><span class="cl"> <span class="n">password_hash</span> <span class="o">=</span> <span class="n">hash_password</span><span class="p">(</span><span class="n">user</span><span class="o">.</span><span class="n">password</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">geode_pool</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (u:User {
</span></span></span><span class="line"><span class="cl"><span class="s2"> id: randomUUID(),
</span></span></span><span class="line"><span class="cl"><span class="s2"> name: $name,
</span></span></span><span class="line"><span class="cl"><span class="s2"> email: $email,
</span></span></span><span class="line"><span class="cl"><span class="s2"> password_hash: $password_hash,
</span></span></span><span class="line"><span class="cl"><span class="s2"> created_at: datetime(),
</span></span></span><span class="line"><span class="cl"><span class="s2"> verified: false
</span></span></span><span class="line"><span class="cl"><span class="s2"> })
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN u.id as user_id, u.email as email
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"name"</span><span class="p">:</span> <span class="n">user</span><span class="o">.</span><span class="n">name</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"email"</span><span class="p">:</span> <span class="n">user</span><span class="o">.</span><span class="n">email</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"password_hash"</span><span class="p">:</span> <span class="n">password_hash</span>
</span></span><span class="line"><span class="cl"> <span class="p">})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="n">user_id</span> <span class="o">=</span> <span class="n">result</span><span class="o">.</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s1">'user_id'</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Send verification email</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">send_verification_email</span><span class="p">(</span><span class="n">user</span><span class="o">.</span><span class="n">email</span><span class="p">,</span> <span class="n">user_id</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="p">{</span><span class="s2">"user_id"</span><span class="p">:</span> <span class="n">user_id</span><span class="p">,</span> <span class="s2">"message"</span><span class="p">:</span> <span class="s2">"Registration successful"</span><span class="p">}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">except</span> <span class="n">UniqueConstraintViolation</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="mi">400</span><span class="p">,</span> <span class="s2">"Email already registered"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nd">@app.get</span><span class="p">(</span><span class="s2">"/api/users/</span><span class="si">{user_id}</span><span class="s2">/profile"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">get_profile</span><span class="p">(</span><span class="n">user_id</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">current_user</span><span class="o">=</span><span class="n">Depends</span><span class="p">(</span><span class="n">get_current_user</span><span class="p">)):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Get user profile"""</span>
</span></span><span class="line"><span class="cl"> <span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">geode_pool</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User {id: $id})
</span></span></span><span class="line"><span class="cl"><span class="s2"> OPTIONAL MATCH (u)-[:FRIENDS_WITH]-(friend:User)
</span></span></span><span class="line"><span class="cl"><span class="s2"> OPTIONAL MATCH (u)-[:POSTED]->(post:Post)
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN
</span></span></span><span class="line"><span class="cl"><span class="s2"> u.id as id,
</span></span></span><span class="line"><span class="cl"><span class="s2"> u.name as name,
</span></span></span><span class="line"><span class="cl"><span class="s2"> u.email as email,
</span></span></span><span class="line"><span class="cl"><span class="s2"> u.created_at as created_at,
</span></span></span><span class="line"><span class="cl"><span class="s2"> COUNT(DISTINCT friend) as friend_count,
</span></span></span><span class="line"><span class="cl"><span class="s2"> COUNT(DISTINCT post) as post_count
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span><span class="s2">"id"</span><span class="p">:</span> <span class="n">user_id</span><span class="p">})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="ow">not</span> <span class="n">result</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">raise</span> <span class="n">HTTPException</span><span class="p">(</span><span class="mi">404</span><span class="p">,</span> <span class="s2">"User not found"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">result</span><span class="o">.</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nd">@app.post</span><span class="p">(</span><span class="s2">"/api/posts"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">create_post</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="n">content</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">current_user</span><span class="o">=</span><span class="n">Depends</span><span class="p">(</span><span class="n">get_current_user</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Create new post"""</span>
</span></span><span class="line"><span class="cl"> <span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">geode_pool</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User {id: $user_id})
</span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (p:Post {
</span></span></span><span class="line"><span class="cl"><span class="s2"> id: randomUUID(),
</span></span></span><span class="line"><span class="cl"><span class="s2"> content: $content,
</span></span></span><span class="line"><span class="cl"><span class="s2"> created_at: datetime(),
</span></span></span><span class="line"><span class="cl"><span class="s2"> likes: 0,
</span></span></span><span class="line"><span class="cl"><span class="s2"> comments: 0
</span></span></span><span class="line"><span class="cl"><span class="s2"> })
</span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (u)-[:POSTED]->(p)
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN p.id as post_id
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"user_id"</span><span class="p">:</span> <span class="n">current_user</span><span class="p">[</span><span class="s1">'id'</span><span class="p">],</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"content"</span><span class="p">:</span> <span class="n">content</span>
</span></span><span class="line"><span class="cl"> <span class="p">})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="p">{</span><span class="s2">"post_id"</span><span class="p">:</span> <span class="n">result</span><span class="o">.</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s1">'post_id'</span><span class="p">]}</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"><span class="nd">@app.get</span><span class="p">(</span><span class="s2">"/api/feed"</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="k">async</span> <span class="k">def</span> <span class="nf">get_feed</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="n">limit</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">20</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">offset</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="n">current_user</span><span class="o">=</span><span class="n">Depends</span><span class="p">(</span><span class="n">get_current_user</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Get personalized feed"""</span>
</span></span><span class="line"><span class="cl"> <span class="n">result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">geode_pool</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (me:User {id: $user_id})-[:FRIENDS_WITH]-(friend:User)-[:POSTED]->(post:Post)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH post, friend
</span></span></span><span class="line"><span class="cl"><span class="s2"> ORDER BY post.created_at DESC
</span></span></span><span class="line"><span class="cl"><span class="s2"> SKIP $offset
</span></span></span><span class="line"><span class="cl"><span class="s2"> LIMIT $limit
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN
</span></span></span><span class="line"><span class="cl"><span class="s2"> post.id as id,
</span></span></span><span class="line"><span class="cl"><span class="s2"> post.content as content,
</span></span></span><span class="line"><span class="cl"><span class="s2"> post.created_at as created_at,
</span></span></span><span class="line"><span class="cl"><span class="s2"> post.likes as likes,
</span></span></span><span class="line"><span class="cl"><span class="s2"> friend.id as author_id,
</span></span></span><span class="line"><span class="cl"><span class="s2"> friend.name as author_name
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"user_id"</span><span class="p">:</span> <span class="n">current_user</span><span class="p">[</span><span class="s1">'id'</span><span class="p">],</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"offset"</span><span class="p">:</span> <span class="n">offset</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"limit"</span><span class="p">:</span> <span class="n">limit</span>
</span></span><span class="line"><span class="cl"> <span class="p">})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="p">{</span><span class="s2">"posts"</span><span class="p">:</span> <span class="p">[</span><span class="nb">dict</span><span class="p">(</span><span class="n">r</span><span class="p">)</span> <span class="k">for</span> <span class="n">r</span> <span class="ow">in</span> <span class="n">result</span><span class="p">]}</span>
</span></span></code></pre></div>
<h4 id="recommendation-engine" class="position-relative d-flex align-items-center group">
<span>Recommendation Engine</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="recommendation-engine"
aria-haspopup="dialog"
aria-label="Share link: Recommendation Engine">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Collaborative filtering implementation:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">RecommendationEngine</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">client</span> <span class="o">=</span> <span class="n">client</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_product_recommendations</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">,</span> <span class="n">limit</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Generate product recommendations using collaborative filtering"""</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Find similar users based on purchase history</span>
</span></span><span class="line"><span class="cl"> <span class="n">similar_users</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (me:User {id: $user_id})-[:PURCHASED]->(p:Product)
</span></span></span><span class="line"><span class="cl"><span class="s2"> <-[:PURCHASED]-(other:User)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE other.id <> $user_id
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH other, COUNT(p) as common_purchases, me
</span></span></span><span class="line"><span class="cl"><span class="s2"> ORDER BY common_purchases DESC
</span></span></span><span class="line"><span class="cl"><span class="s2"> LIMIT 50
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (other)-[:PURCHASED]->(rec:Product)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE NOT EXISTS {
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (me)-[:PURCHASED]->(rec)
</span></span></span><span class="line"><span class="cl"><span class="s2"> }
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH rec, COUNT(other) as score, SUM(common_purchases) as weight
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN
</span></span></span><span class="line"><span class="cl"><span class="s2"> rec.id as product_id,
</span></span></span><span class="line"><span class="cl"><span class="s2"> rec.name as name,
</span></span></span><span class="line"><span class="cl"><span class="s2"> rec.price as price,
</span></span></span><span class="line"><span class="cl"><span class="s2"> score * weight as recommendation_score
</span></span></span><span class="line"><span class="cl"><span class="s2"> ORDER BY recommendation_score DESC
</span></span></span><span class="line"><span class="cl"><span class="s2"> LIMIT $limit
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span><span class="s2">"user_id"</span><span class="p">:</span> <span class="n">user_id</span><span class="p">,</span> <span class="s2">"limit"</span><span class="p">:</span> <span class="n">limit</span><span class="p">})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">similar_users</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">get_content_based_recommendations</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">,</span> <span class="n">limit</span><span class="o">=</span><span class="mi">10</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Content-based recommendations using product attributes"""</span>
</span></span><span class="line"><span class="cl"> <span class="n">recommendations</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User {id: $user_id})-[:PURCHASED]->(liked:Product)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH u, COLLECT(liked.category) as liked_categories,
</span></span></span><span class="line"><span class="cl"><span class="s2"> AVG(liked.price) as avg_price
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (rec:Product)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE rec.category IN liked_categories
</span></span></span><span class="line"><span class="cl"><span class="s2"> AND NOT EXISTS { MATCH (u)-[:PURCHASED]->(rec) }
</span></span></span><span class="line"><span class="cl"><span class="s2"> AND rec.price BETWEEN avg_price * 0.7 AND avg_price * 1.3
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH rec, SIZE([cat IN rec.tags WHERE cat IN liked_categories]) as tag_match
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN
</span></span></span><span class="line"><span class="cl"><span class="s2"> rec.id as product_id,
</span></span></span><span class="line"><span class="cl"><span class="s2"> rec.name as name,
</span></span></span><span class="line"><span class="cl"><span class="s2"> rec.price as price,
</span></span></span><span class="line"><span class="cl"><span class="s2"> tag_match as relevance_score
</span></span></span><span class="line"><span class="cl"><span class="s2"> ORDER BY relevance_score DESC
</span></span></span><span class="line"><span class="cl"><span class="s2"> LIMIT $limit
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span><span class="s2">"user_id"</span><span class="p">:</span> <span class="n">user_id</span><span class="p">,</span> <span class="s2">"limit"</span><span class="p">:</span> <span class="n">limit</span><span class="p">})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">recommendations</span>
</span></span></code></pre></div>
<h4 id="social-network-analytics" class="position-relative d-flex align-items-center group">
<span>Social Network Analytics</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="social-network-analytics"
aria-haspopup="dialog"
aria-label="Share link: Social Network Analytics">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Graph analytics for social features:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">SocialAnalytics</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">client</span> <span class="o">=</span> <span class="n">client</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">calculate_user_influence</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">user_id</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Calculate user influence score"""</span>
</span></span><span class="line"><span class="cl"> <span class="n">metrics</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User {id: $user_id})
</span></span></span><span class="line"><span class="cl"><span class="s2"> OPTIONAL MATCH (u)<-[:FOLLOWS]-(follower:User)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH u, COUNT(DISTINCT follower) as followers
</span></span></span><span class="line"><span class="cl"><span class="s2"> OPTIONAL MATCH (u)-[:POSTED]->(post:Post)<-[:LIKED]-(liker:User)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH u, followers, COUNT(DISTINCT liker) as total_likes
</span></span></span><span class="line"><span class="cl"><span class="s2"> OPTIONAL MATCH (u)-[:POSTED]->(post:Post)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH u, followers, total_likes, COUNT(DISTINCT post) as posts
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN
</span></span></span><span class="line"><span class="cl"><span class="s2"> followers,
</span></span></span><span class="line"><span class="cl"><span class="s2"> total_likes,
</span></span></span><span class="line"><span class="cl"><span class="s2"> posts,
</span></span></span><span class="line"><span class="cl"><span class="s2"> (followers * 2.0 + total_likes * 0.5 + posts * 1.0) as influence_score
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span><span class="s2">"user_id"</span><span class="p">:</span> <span class="n">user_id</span><span class="p">})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">metrics</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="k">if</span> <span class="n">metrics</span> <span class="k">else</span> <span class="kc">None</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">detect_communities</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Detect communities using label propagation"""</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Initialize communities</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User)
</span></span></span><span class="line"><span class="cl"><span class="s2"> SET u.community = u.id
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Iterate label propagation</span>
</span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="n">iteration</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">10</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="n">changes</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User)-[:FRIENDS_WITH]-(neighbor:User)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH u, neighbor.community as label, COUNT(*) as freq
</span></span></span><span class="line"><span class="cl"><span class="s2"> ORDER BY u, freq DESC
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH u, COLLECT(label)[0] as most_common
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE u.community <> most_common
</span></span></span><span class="line"><span class="cl"><span class="s2"> SET u.community = most_common
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN COUNT(u) as changes
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="n">changes</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s1">'changes'</span><span class="p">]</span> <span class="o">==</span> <span class="mi">0</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">break</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Return communities</span>
</span></span><span class="line"><span class="cl"> <span class="n">communities</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User)
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN u.community as community_id, COUNT(u) as size
</span></span></span><span class="line"><span class="cl"><span class="s2"> ORDER BY size DESC
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">communities</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">find_influencers</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">limit</span><span class="o">=</span><span class="mi">20</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Find top influencers"""</span>
</span></span><span class="line"><span class="cl"> <span class="n">influencers</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">query</span><span class="p">(</span><span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (u:User)
</span></span></span><span class="line"><span class="cl"><span class="s2"> OPTIONAL MATCH (u)<-[:FOLLOWS]-(follower:User)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH u, COUNT(DISTINCT follower) as followers
</span></span></span><span class="line"><span class="cl"><span class="s2"> OPTIONAL MATCH (u)-[:POSTED]->(p:Post)
</span></span></span><span class="line"><span class="cl"><span class="s2"> WITH u, followers, AVG(p.likes) as avg_likes
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE followers > 100
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN
</span></span></span><span class="line"><span class="cl"><span class="s2"> u.id as user_id,
</span></span></span><span class="line"><span class="cl"><span class="s2"> u.name as name,
</span></span></span><span class="line"><span class="cl"><span class="s2"> followers,
</span></span></span><span class="line"><span class="cl"><span class="s2"> avg_likes,
</span></span></span><span class="line"><span class="cl"><span class="s2"> (followers + avg_likes * 10) as influence_score
</span></span></span><span class="line"><span class="cl"><span class="s2"> ORDER BY influence_score DESC
</span></span></span><span class="line"><span class="cl"><span class="s2"> LIMIT $limit
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span> <span class="p">{</span><span class="s2">"limit"</span><span class="p">:</span> <span class="n">limit</span><span class="p">})</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="n">influencers</span>
</span></span></code></pre></div>
<h4 id="e-commerce-transaction-processing" class="position-relative d-flex align-items-center group">
<span>E-Commerce Transaction Processing</span>
<button type="button"
class="h-share btn btn-link p-0 text-decoration-none link-secondary opacity-50 hover-opacity-100 transition-all ms-1"
data-share-target="e-commerce-transaction-processing"
aria-haspopup="dialog"
aria-label="Share link: E-Commerce Transaction Processing">
<i class="fa-sharp-duotone fa-solid fa-share-nodes" aria-hidden="true" style="font-size: 0.8em;"></i>
<span class="visually-hidden">Share link</span>
</button>
</h4><p>Complete order processing example:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-python" data-lang="python"><span class="line"><span class="cl"><span class="k">class</span> <span class="nc">OrderProcessor</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">def</span> <span class="fm">__init__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">client</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="bp">self</span><span class="o">.</span><span class="n">client</span> <span class="o">=</span> <span class="n">client</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">def</span> <span class="nf">process_order</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">customer_id</span><span class="p">,</span> <span class="n">items</span><span class="p">):</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""Process order with inventory check"""</span>
</span></span><span class="line"><span class="cl"> <span class="k">async</span> <span class="k">with</span> <span class="bp">self</span><span class="o">.</span><span class="n">client</span><span class="o">.</span><span class="n">connection</span><span class="p">()</span> <span class="k">as</span> <span class="n">conn</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Isolation is configured server-side</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">begin</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"> <span class="k">try</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Create order</span>
</span></span><span class="line"><span class="cl"> <span class="n">order_result</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">query</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (c:Customer {id: $customer_id})
</span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (o:Order {
</span></span></span><span class="line"><span class="cl"><span class="s2"> id: randomUUID(),
</span></span></span><span class="line"><span class="cl"><span class="s2"> status: 'pending',
</span></span></span><span class="line"><span class="cl"><span class="s2"> created_at: datetime(),
</span></span></span><span class="line"><span class="cl"><span class="s2"> subtotal: 0.0,
</span></span></span><span class="line"><span class="cl"><span class="s2"> tax: 0.0,
</span></span></span><span class="line"><span class="cl"><span class="s2"> total: 0.0
</span></span></span><span class="line"><span class="cl"><span class="s2"> })
</span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (c)-[:PLACED]->(o)
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN o.id as order_id
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="p">{</span><span class="s2">"customer_id"</span><span class="p">:</span> <span class="n">customer_id</span><span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="n">order_id</span> <span class="o">=</span> <span class="n">order_result</span><span class="o">.</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">][</span><span class="s2">"order_id"</span><span class="p">]</span><span class="o">.</span><span class="n">as_string</span>
</span></span><span class="line"><span class="cl"> <span class="n">subtotal</span> <span class="o">=</span> <span class="mf">0.0</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Process each item</span>
</span></span><span class="line"><span class="cl"> <span class="k">for</span> <span class="n">item</span> <span class="ow">in</span> <span class="n">items</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="c1"># Check and reserve inventory</span>
</span></span><span class="line"><span class="cl"> <span class="n">inventory</span><span class="p">,</span> <span class="n">_</span> <span class="o">=</span> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">query</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (p:Product {id: $product_id})
</span></span></span><span class="line"><span class="cl"><span class="s2"> WHERE p.stock >= $quantity
</span></span></span><span class="line"><span class="cl"><span class="s2"> SET p.stock = p.stock - $quantity
</span></span></span><span class="line"><span class="cl"><span class="s2"> RETURN p.id AS id, p.name AS name, p.price AS price
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"product_id"</span><span class="p">:</span> <span class="n">item</span><span class="p">[</span><span class="s2">"product_id"</span><span class="p">],</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"quantity"</span><span class="p">:</span> <span class="n">item</span><span class="p">[</span><span class="s2">"quantity"</span><span class="p">],</span>
</span></span><span class="line"><span class="cl"> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">if</span> <span class="ow">not</span> <span class="n">inventory</span><span class="o">.</span><span class="n">rows</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">raise</span> <span class="n">InsufficientInventoryError</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="sa">f</span><span class="s2">"Product </span><span class="si">{</span><span class="n">item</span><span class="p">[</span><span class="s1">'product_id'</span><span class="p">]</span><span class="si">}</span><span class="s2"> out of stock"</span>
</span></span><span class="line"><span class="cl"> <span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="n">product</span> <span class="o">=</span> <span class="n">inventory</span><span class="o">.</span><span class="n">rows</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"> <span class="n">unit_price</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">product</span><span class="p">[</span><span class="s2">"price"</span><span class="p">]</span><span class="o">.</span><span class="n">as_decimal</span><span class="p">)</span>
</span></span><span class="line"><span class="cl"> <span class="n">line_total</span> <span class="o">=</span> <span class="n">unit_price</span> <span class="o">*</span> <span class="n">item</span><span class="p">[</span><span class="s2">"quantity"</span><span class="p">]</span>
</span></span><span class="line"><span class="cl"> <span class="n">subtotal</span> <span class="o">+=</span> <span class="n">line_total</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Create order line item</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (o:Order {id: $order_id}), (p:Product {id: $product_id})
</span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (li:LineItem {
</span></span></span><span class="line"><span class="cl"><span class="s2"> quantity: $quantity,
</span></span></span><span class="line"><span class="cl"><span class="s2"> unit_price: $unit_price,
</span></span></span><span class="line"><span class="cl"><span class="s2"> total: $total
</span></span></span><span class="line"><span class="cl"><span class="s2"> })
</span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (o)-[:CONTAINS]->(li)
</span></span></span><span class="line"><span class="cl"><span class="s2"> CREATE (li)-[:FOR_PRODUCT]->(p)
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"order_id"</span><span class="p">:</span> <span class="n">order_id</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"product_id"</span><span class="p">:</span> <span class="n">item</span><span class="p">[</span><span class="s2">"product_id"</span><span class="p">],</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"quantity"</span><span class="p">:</span> <span class="n">item</span><span class="p">[</span><span class="s2">"quantity"</span><span class="p">],</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"unit_price"</span><span class="p">:</span> <span class="n">unit_price</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"total"</span><span class="p">:</span> <span class="n">line_total</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Calculate totals</span>
</span></span><span class="line"><span class="cl"> <span class="n">tax</span> <span class="o">=</span> <span class="n">subtotal</span> <span class="o">*</span> <span class="mf">0.08</span> <span class="c1"># 8% tax</span>
</span></span><span class="line"><span class="cl"> <span class="n">total</span> <span class="o">=</span> <span class="n">subtotal</span> <span class="o">+</span> <span class="n">tax</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="c1"># Update order totals</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">execute</span><span class="p">(</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"""
</span></span></span><span class="line"><span class="cl"><span class="s2"> MATCH (o:Order {id: $order_id})
</span></span></span><span class="line"><span class="cl"><span class="s2"> SET o.subtotal = $subtotal,
</span></span></span><span class="line"><span class="cl"><span class="s2"> o.tax = $tax,
</span></span></span><span class="line"><span class="cl"><span class="s2"> o.total = $total,
</span></span></span><span class="line"><span class="cl"><span class="s2"> o.status = 'confirmed'
</span></span></span><span class="line"><span class="cl"><span class="s2"> """</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="p">{</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"order_id"</span><span class="p">:</span> <span class="n">order_id</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"subtotal"</span><span class="p">:</span> <span class="n">subtotal</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"tax"</span><span class="p">:</span> <span class="n">tax</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="s2">"total"</span><span class="p">:</span> <span class="n">total</span><span class="p">,</span>
</span></span><span class="line"><span class="cl"> <span class="p">},</span>
</span></span><span class="line"><span class="cl"> <span class="p">)</span>
</span></span><span class="line"><span class="cl">
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">commit</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"> <span class="k">return</span> <span class="p">{</span><span class="s2">"order_id"</span><span class="p">:</span> <span class="n">order_id</span><span class="p">,</span> <span class="s2">"total"</span><span class="p">:</span> <span class="n">total</span><span class="p">}</span>
</span></span><span class="line"><span class="cl"> <span class="k">except</span> <span class="ne">Exception</span><span class="p">:</span>
</span></span><span class="line"><span class="cl"> <span class="k">await</span> <span class="n">conn</span><span class="o">.</span><span class="n">rollback</span><span class="p">()</span>
</span></span><span class="line"><span class="cl"> <span class="k">raise</span>
</span></span></code></pre></div><p>Browse the tagged content below to discover comprehensive code examples and integration patterns for Geode applications.</p>
Related Articles
Tutorials and Examples
Step-by-step tutorials for Geode: MATCH basics, indexing and EXPLAIN/PROFILE, graph algorithms, embeddings, and backup/restore workflows
Use Case Guides
Practical guides to modeling and querying real-world domains in Geode, mapping features like embeddings, vector search, security, and analytics to …
Use Cases
Real-world use cases and applications for Geode graph database including social networks, fraud detection, and recommendations