sqlglot-python
Use for writing, reviewing, debugging, or testing Python code that parses, inspects, transforms, builds, qualifies, optimizes, formats, or transpiles SQL with SQLGlot.
Install / Use
npx skills add schattenspiegel/skill-foundry-skills --skill sqlglot-pythonInstalls into whichever agent you are using.
SKILL.md
Installable skill definition
Quality Score
Category
Data & AnalyticsSupported Platforms
Our assessment of sqlglot-python
sqlglot-python scores 67/100 on our quality scale, 186th of 231 Data & Analytics skills we index.
Its SKILL.md is 9.1 KB long, well organised into 13 sections with 2 code examples: a thorough specification that gives an agent plenty to work with.
It has no GitHub stars yet, so there is no community track record; judge it on its content.
Maintenance, license and trust
- We could not determine when the repository was last updated.
- Our last check on 2026-09-24 found the source still online.
- No license is declared. By default that means all rights are reserved: you can read it, but reusing or redistributing it is not clearly permitted. Ask the author before building on it commercially.
- Its trust signals score 68/100, with 3 cautions from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
No issues foundOur scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful.
AI review by kimi-k2.7-code on 2026-09-24. Automated pattern scan on 2026-09-24. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
sqlglot-python compared with similar skills
All 4 of these similar skills score higher than sqlglot-python; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| sqlglot-python (this skill)by schattenspiegel | 67 | 0 | — | SKILL.md |
| claude-memby thedotmack | 100 | 94.7k | today | CLAUDE.md |
| Agent-Reachby Panniantong | 100 | 85.6k | 11d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 73.9k | today | CLAUDE.md |
| Scraplingby D4Vinci | 100 | 83.9k | today | MCP Server |
Frequently asked questions
- How do I install sqlglot-python?
- Run
npx skills add schattenspiegel/skill-foundry-skills --skill sqlglot-python. The install tabs above show the steps for each supported agent. - Which AI agents does sqlglot-python work with?
- It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
- Is sqlglot-python safe to use?
- Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful. It declares no license and scores 68/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is sqlglot-python still maintained?
- We could not determine when the repository was last updated.
Skill content
View source on GitHubname: sqlglot-python description: Use for writing, reviewing, debugging, or testing Python code that parses, inspects, transforms, builds, qualifies, optimizes, formats, or transpiles SQL with SQLGlot. Trigger on parse_one/parse, sqlglot expressions and scopes, dialect conversion, AST traversal, lineage, qualification, schema-aware rewrites, and unsupported translation. Do not use for executing SQL, database query tuning, regex-only text edits, ORM query construction, SQLFluff lint configuration, or generic SQL unrelated to SQLGlot. argument-hint: "[SQLGlot parse, AST, transform, dialect, or transpilation task]"
SQLGlot Python
Produce dialect-explicit SQLGlot code that treats SQL as a typed syntax tree, preserves caller ownership, separates syntactic rewrite from semantic proof, and fails visibly when translation is unsupported.
Boundary
Use this skill when the implementation imports SQLGlot or explicitly needs its parser/transpiler/AST. SQLGlot does not execute against the target database and is not an authorization sandbox, query optimizer for physical performance, or substitute for database parameters. Use the database's own tooling for runtime plans and execution semantics.
Know the objects before editing
| Object | Meaning | Use it for |
|---|---|---|
| Dialect | Parser and generator rules for a SQL family. | Interpreting source tokens and emitting target syntax. |
| Expression | One AST node with named child arguments and parent/tree relationships. | Semantic inspection, construction, and transformation. |
| Statement expression | Root node such as Select, Insert, Create, or Command. | Classifying allowed jobs and preserving statement boundaries. |
| Identifier | A name whose quoting and normalization depend on dialect. | Tables, columns, aliases, and other identifiers—not data values. |
| Literal / placeholder node | A typed SQL value or bind marker in the AST. | Values; keep runtime user data parameterized by the executor. |
| Scope | A query-resolution context for sources, projections, subqueries, and CTEs. | Analysis that cannot be correct from local node search alone. |
| Schema mapping | Table/column type information supplied by the caller. | Qualification, star expansion, type annotation, and type-sensitive rewrites. |
parse_one returns one root expression; parse preserves a multi-statement
sequence. .sql(dialect=...) generates text from an AST. transpile combines
source parsing and target generation, but syntactic success is not proof of
equivalent behavior in the target engine. Expression methods can mutate nodes
or return changed trees; copy a caller-owned tree before modifying it unless
in-place mutation is the declared API. Read the AST and dialect
model.
Ordered workflow
- Recover the contract: one or many statements, known source dialect, target dialect, allowed statement/node classes, required semantic preservation, available schema, output formatting, and error policy.
- Pass
read=whenever the source dialect is known. Do not let the SQLGlot superset dialect guess vendor syntax. - Parse once. Reject parse errors and disallowed roots before traversing or transforming.
- Use
Expressionclasses,find_all, scopes, builders, ortransform; never use regex/string replacement for structural SQL edits. - Supply schema and qualify/type-annotate only when the transformation needs name or type resolution. Do not invent missing catalog facts.
- Copy before changing a tree whose original must remain available.
- Generate with an explicit target dialect and a strict unsupported-feature policy. Preserve statement count and ordering.
- Reparse generated SQL in the target dialect, then run target-engine tests when semantic equivalence matters.
Choose by intent
| Need | Use | Required guard |
|---|---|---|
| Parse exactly one known statement | parse_one(sql, read=...) | Establish that a one-statement boundary is intended. |
| Preserve a script's statements | parse(sql, read=...) | Validate every root; do not inspect only the first. |
| Find local syntax nodes | find / find_all with exp classes | Local traversal is not column resolution. |
| Resolve sources/columns across CTEs/subqueries | Scope/optimizer qualification utilities | Supply schema/catalog facts where required. |
| Rewrite nodes recursively | Expression.transform or explicit AST replacement | Preserve parentage and copy policy; test nested cases. |
| Construct SQL | sqlglot.exp nodes/builders | Keep identifiers distinct from literals and bind parameters. |
| Translate dialects | transpile(read=..., write=...) or parse then .sql(dialect=...) | Raise/report unsupported constructs; validate target semantics. |
| Canonical logical AST | supported optimizer entry point with schema | Not physical query-performance tuning. |
Read the operation map before choosing parsing, building, scope analysis, transformation, optimization, or generation APIs.
Canonical strict transpilation
import sqlglot
from sqlglot import ErrorLevel
def transpile_script(sql: str, source: str, target: str) -> list[str]:
if not source or not target:
raise ValueError("source and target dialects are required")
return sqlglot.transpile(
sql,
read=source,
write=target,
unsupported_level=ErrorLevel.RAISE,
pretty=True,
)
The list preserves the possibility of multiple statements and rejects known
unsupported generation rather than warning and emitting a degraded query.
Callers that accept only one statement must check len(result) == 1. Reparse
each output with read=target; execute representative queries in the target
engine before claiming semantic equivalence.
Canonical structural inspection
from sqlglot import exp, parse_one
def selected_columns(sql: str, dialect: str) -> tuple[str, ...]:
tree = parse_one(sql, read=dialect)
if not isinstance(tree, exp.Select):
raise ValueError(f"expected SELECT, got {type(tree).__name__}")
return tuple(node.sql(dialect=dialect) for node in tree.expressions)
This inspects projection expressions rather than regex-matching commas or
column-like tokens. It does not claim to resolve *, aliases, or source columns;
that requires scopes and often schema qualification.
High-risk rules
Dialects and semantics
- Always specify the source dialect when known and target dialect when generating. Identifier case, quoting, function names, date arithmetic, casts, arrays, JSON, and null behavior can differ.
- Treat unsupported warnings as failures for correctness-critical translation. A successful parse means the syntax was represented, not that every target construct has an equivalent.
- Type-sensitive transpilation and optimization need schema information. If the catalog is unavailable, preserve the construct or return an uncertainty; never fabricate column types.
- SQLGlot optimization is logical canonicalization, not target physical-plan tuning. Benchmark or inspect the actual engine for performance claims.
AST mutation and resolution
- Match nodes by class and semantic arguments, not
str(node). Preserve comments and formatting only to the degree the selected generator supports; regenerated SQL is not a textual round trip. - Copy before mutation when a function promises not to alter its input. Test nested subqueries, CTE shadowing, aliases, quoted identifiers, stars, and correlated references.
find_all(exp.Column)finds syntax nodes but does not resolve which table supplies them. Use scope/qualification analysis for lineage or authorization.- Construct identifiers with identifier helpers/nodes and values with literals or executor placeholders. Never turn untrusted text into an expression by parsing it merely to avoid quoting.
Security boundary
Parsing SQL does not make it safe to execute. If only read-only queries are allowed, inspect every parsed statement and all prohibited node classes, reject commands the parser represents generically, enforce database credentials and resource limits, and bind data values at execution. Treat AST allowlisting as defense in depth, not the sole authorization layer.
Run the installed-API inspector, read version and API grounding, then apply the AST verification matrix.
Completion gate
Do not declare completion until source and target dialects are explicit or a documented unknown branch exists; multi-statement input cannot bypass checks; allowed root/node classes are enforced; mutations honor ownership; identifiers and values remain distinct; schema-dependent transforms have real schema; unsupported generation is surfaced; target output reparses; nested/quoted/CTE fixtures pass; and semantic or performance claims are verified in the target database rather than inferred from SQLGlot alone.
References
Related Skills
claude-mem
94.7kPersistent Context Across Sessions for Every Agent – Captures everything your agent does during sessions, compresses it with AI, and injects relevant context back into future sessions. Works with Claude Code, OpenClaw, Codex, Gemini, Hermes, Copilot, OpenCode + More
Agent-Reach
85.6kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
73.9kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
Scrapling
83.9k🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
