GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - andialbrecht/sqlparse: A non-validating SQL parser module for Python

BranchesTags
Open more actions menu

Latest commit

 

History

1,395 Commits
1,395 Commits

Folders and files

NameName
Last commit message
Last commit date
.github
.github
 
 
benchmarks
benchmarks
 
 
docs
docs
 
 
examples
examples
 
 
sqlparse
sqlparse
 
 
tests
tests
 
 
.gitignore
.gitignore
 
 
.pre-commit-hooks.yaml
.pre-commit-hooks.yaml
 
 
.readthedocs.yaml
.readthedocs.yaml
 
 
AGENTS.md
AGENTS.md
 
 
AUTHORS
AUTHORS
 
 
CHANGELOG
CHANGELOG
 
 
CLAUDE.md
CLAUDE.md
 
 
CONTRIBUTING.md
CONTRIBUTING.md
 
 
LICENSE
LICENSE
 
 
Makefile
Makefile
 
 
README.md
README.md
 
 
SECURITY.md
SECURITY.md
 
 
TODO
TODO
 
 
pyproject.toml
pyproject.toml
 
 
uv.lock
uv.lock
 
 

Repository files navigation

sqlparse

Build Status Coverage Documentation PyPI Python versions License

Important

Project Status: End of Maintenance

sqlparse is no longer actively maintained. Version 0.6.1 was its final release.

No further bug fixes, feature updates, or security fixes are planned. The repository and published packages will remain available, but users should not expect ongoing maintenance or security support.

Software Supply Chain Security: To minimize supply chain risks, I will retain control of the sqlparse project on PyPI and this GitHub repository. There are no plans to transfer ownership or grant publishing or commit access to third parties.

After many years of maintaining sqlparse as a volunteer, I have decided to bring the project to a close. A more detailed explanation of this decision is available separately.

THANKS TO ALL USERS AND CONTRIBUTORS! I would like to thank everyone who has contributed to sqlparse over the years.

A non-validating SQL parser for Python. Split scripts into statements, format them, and walk their token tree.

sqlparse tokenizes SQL text and groups the parts it recognizes into a tree of statements, clauses, identifiers and expressions. It accepts any input without validating it, and makes no assumptions about a particular SQL dialect, so vendor extensions and templated SQL parse too. It is a building block for formatters, linters, editors and query analysis tools.

Licensed under the New BSD license.

Install

pip install sqlparse

Usage

Three module-level functions cover most needs: split(), format() and parse().

Split a script into statements

import sqlparse

sqlparse.split("select * from foo; select * from bar;")
# ['select * from foo;', 'select * from bar;']

Format a statement

print(sqlparse.format("select id,name from users where active=1",
                      reindent=True, keyword_case="upper"))
SELECT id,
       name
FROM users
WHERE active=1

format() accepts the same options as the command line, among them reindent, keyword_case, strip_comments and indent_width.

Parse and inspect a statement

statement = sqlparse.parse("select id, name from users where active = 1")[0]

print(statement.get_type())
for token in statement.tokens:
    if not token.is_whitespace:
        print(f"{token.ttype or type(token).__name__!s:20} {token!s}")
SELECT
Token.Keyword.DML    select
IdentifierList       id, name
Token.Keyword        from
Identifier           users
Where                where active = 1

Tokens with a ttype are leaves. The others are groups you can descend into, which is how nested constructs like subqueries and CASE expressions are represented. See Analyzing SQL statements for the traversal API.

Command line

Installing sqlparse also provides the sqlformat command. It reads from stdin when the filename is -, writes to stdout by default, and rewrites files in place with --in-place:

sqlformat --reindent --keywords upper query.sql

Run sqlformat --help for all formatting options.

Pre-commit hook

Format SQL files on commit with pre-commit:

repos:
  - repo: https://github.com/andialbrecht/sqlparse
    rev: 0.5.5  # use the latest release
    hooks:
      - id: sqlformat
        args: [--in-place, --reindent, --keywords, upper]

The hook defaults to --in-place --reindent. When overriding args, keep --in-place, or the hook writes to stdout and leaves your files unchanged.

Links

Documentation https://sqlparse.readthedocs.io/
Release notes https://sqlparse.readthedocs.io/en/latest/changes.html
Issues https://github.com/andialbrecht/sqlparse/issues
Discussions https://github.com/andialbrecht/sqlparse/discussions
Online demo https://sqlformat.org/

Contributing

Contributions are welcome. See CONTRIBUTING.md to get started.

sqlparse is maintained in spare time, so it can take a while before an issue or pull request gets a reply. Thanks for your patience. A pull request that comes with tests for the behavior it changes is usually the quickest to review.

For security issues, please follow SECURITY.md rather than opening a public issue.

License

sqlparse is licensed under the New BSD license; see LICENSE for the full text. Parts of the code are based on Pygments, written by Georg Brandl and others.

About

A non-validating SQL parser module for Python

Topics

formatterpythonsqlsql-formattersql-parsertokenizer

Resources

Readme
BSD-3-Clause license

Code of conduct

Code of conduct

Contributing

Contributing

Security policy

Security policy
Activity

Stars

4.0k stars

Watchers

84 watching

Forks

781 forks
Report repository

Releases

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.