# Pygraphistry Connectors

> PyGraphistry connector workflows for external data sources and graph databases. Use when asked to "connect graphistry to Neo4j", "load from Splunk into graphistry", "query Kusto/ADX and visualize", "Databricks graph", "TigerGraph with pygraphistry", "ingest SQL into a graph", or any "graphistry + [external platform]" request. Also triggers on Neptune, Postgres, BigQuery, Memgraph, or connector/plugin keywords. Proactively suggest when the user has data in an external system and wants graph visualization without first loading it into a DataFrame.

- Skill: `graphistry/pygraphistry-connectors` (Agent Skill)
- Install (CLI): `npx skillmds@latest add graphistry/pygraphistry-connectors`
- Raw SKILL.md: https://api.skillmd.com/api/skills/graphistry/pygraphistry-connectors/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Data & Analytics
- Author: graphistry (https://skillmd.com/u/graphistry)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/graphistry/pygraphistry-connectors

---


# PyGraphistry Connectors

## Doc routing (local + canonical)
- First route with `../pygraphistry/references/pygraphistry-readthedocs-toc.md`.
- Use `../pygraphistry/references/pygraphistry-readthedocs-top-level.tsv` for section-level shortcuts.
- Only scan `../pygraphistry/references/pygraphistry-readthedocs-sitemap.xml` when a needed page is missing.
- Use one batched discovery read before deep-page reads; avoid `cat *` and serial micro-reads.
- In user-facing answers, prefer canonical `https://pygraphistry.readthedocs.io/en/latest/...` links.

## Strategy
- Prefer dataframe-first ingestion when practical, then bind with `edges()/nodes()`.
- Use connector-specific notebook patterns when auth/query semantics are specialized.
- For very large datasets, push filtering/aggregation upstream before plotting.
- Keep connector and Graphistry credentials in env vars or secret stores; no hardcoded keys.
- Never use placeholder literals like `username='user'` / `password='pass'` / `username='...'`; use `os.environ[...]` or `os.environ.get(...)`.
- For concise tasks, respond with a single compact code block and minimal prose.
- In concise snippets, prefer explicit privacy literals (`'private'` or `'organization'`) over placeholder variables.

## Connector triage rubric
- Use native graph-db connectors (`cypher()`, Neptune/TigerGraph flows) when traversal is best expressed upstream.
- For local Cypher-style queries on in-memory PyGraphistry graphs (no external DB), use `g.gfql("MATCH ...")`. Note: `graphistry.cypher()` is a distinct Neo4j/Memgraph/Neptune connector, not the same as local GFQL Cypher.
- Use SQL/log source extraction when your source is tabular or SIEM-centric, then bind in PyGraphistry.
- If unsure, start with source-native query -> dataframe -> `edges()/nodes()`, then optimize connector depth.

## Connector families
- Graph DBs: Neo4j, Neptune, TigerGraph, Memgraph, Arango.
- Data/SQL: Databricks, PostgreSQL, Spanner, warehouse-style pipelines.
- Logs/SIEM: Splunk, Kusto, AlienVault.
- Compute/layout plugins: networkx, graphviz, cugraph, igraph, hypernetx.

## Minimal examples
```python
# Neo4j/Memgraph/Neptune connector (runs query on external DB server)
g = graphistry.cypher('MATCH (a)-[r]->(b) RETURN a,b,r')
g.plot()
```

```python
# Local Cypher via GFQL (no external DB needed — preferred for local graphs)
g2 = g.gfql("MATCH (a)-[r]->(b) WHERE a.score > 10 RETURN a.id, b.id")
```

```python
# Graphistry org/service-account auth before connector workflows
graphistry.register(
    api=3,
    org_name=os.environ.get('GRAPHISTRY_ORG_NAME'),
    personal_key_id=os.environ.get('GRAPHISTRY_PERSONAL_KEY_ID'),
    personal_key_secret=os.environ.get('GRAPHISTRY_PERSONAL_KEY_SECRET')
)
```

```python
# Generic dataframe path after source-specific query/extract
# edges_df: src,dst,...
g = graphistry.edges(edges_df, 'src', 'dst')
graphistry.privacy(mode='private')
plot_url = g.plot(render=False)
```

```python
# Connector-oriented flow with explicit nodes + focused GFQL slice
# Example source can be Neo4j/Splunk -> dataframe extraction
g = graphistry.edges(edges_df, 'src', 'dst').nodes(nodes_df, 'id')
g_focus = g.gfql([...]).name('connector-slice')
graphistry.privacy(mode='organization')
plot_url = g_focus.plot(render=False)
```

## Canonical docs
- Plugins overview: https://pygraphistry.readthedocs.io/en/latest/plugins.html
- Connector notebooks: https://pygraphistry.readthedocs.io/en/latest/notebooks/plugins.connectors.html
- Compute/layout plugin notebooks: https://pygraphistry.readthedocs.io/en/latest/notebooks/plugins.compute.html
- Notebooks index: https://pygraphistry.readthedocs.io/en/latest/notebooks/index.html

