{"id":452,"library":"sqlparse","title":"sqlparse: A Non-Validating SQL Parser for Python","description":"sqlparse is a non-validating SQL parser for Python, providing support for parsing, splitting, and formatting SQL statements. The current version is 0.5.5, released on March 28, 2026, with a release cadence of approximately every 6 months.","status":"active","version":"0.5.5","language":"python","source_language":"en","source_url":"https://github.com/andialbrecht/sqlparse","tags":["SQL","Parser","Python","Library"],"install":[{"cmd":"pip install sqlparse","lang":"bash","label":"Install sqlparse"}],"dependencies":[{"reason":"Requires Python 3.8 or higher","package":"python","optional":false}],"imports":[{"note":"Ensure the module is installed in your environment","symbol":"sqlparse","correct":"import sqlparse"}],"quickstart":{"code":"import sqlparse\n\n# Split a string containing two SQL statements:\nraw = 'SELECT * FROM foo; SELECT * FROM bar;'\nstatements = sqlparse.split(raw)\n\n# Format the first statement and print it out:\nfirst = statements[0]\nprint(sqlparse.format(first, reindent=True, keyword_case='upper'))\n\n# Parsing a SQL statement:\nparsed = sqlparse.parse('SELECT * FROM foo')[0]\nprint(parsed.tokens)","lang":"python","description":"A quickstart guide demonstrating how to split, format, and parse SQL statements using sqlparse."},"warnings":[{"fix":"Install sqlparse using pip: pip install sqlparse","message":"Ensure that sqlparse is installed in your environment to avoid ImportError.","severity":"breaking","affected_versions":"all"}],"env_vars":null,"last_verified":"2026-05-12T13:54:17.549Z","next_check":"2026-09-28T00:00:00.000Z","problems":[{"fix":"pip install sqlparse","cause":"The 'sqlparse' library has not been installed in the current Python environment.","error":"ModuleNotFoundError: No module named 'sqlparse'"},{"fix":"Pass formatting options directly as keyword arguments, for example: `sqlparse.format(sql_string, reindent=True, keyword_case='upper')`.","cause":"The `sqlparse.format` function expects formatting options as direct keyword arguments, not as a dictionary passed via an 'options' parameter.","error":"TypeError: format() got an unexpected keyword argument 'options'"},{"fix":"Check if a token is a group using `token.is_group` before attempting to access its `tokens` attribute or iterating over it. For example:\n```python\nimport sqlparse\nsql = 'SELECT * FROM foo;'\nparsed = sqlparse.parse(sql)[0]\nfor token in parsed.tokens:\n    if token.is_group:\n        print(f\"Group: {token.normalized}\")\n        for subtoken in token.tokens:\n            print(f\"  Subtoken: {subtoken.normalized}\")\n    else:\n        print(f\"Token: {token.normalized}\")\n```","cause":"When iterating through the tokens of a parsed SQL statement, not all tokens are `TokenList` (group) objects; simple `Token` objects do not have a `tokens` attribute.","error":"AttributeError: 'Token' object has no attribute 'tokens'"}],"ecosystem":"pypi","meta_description":null,"install_score":100,"install_tag":"verified","quickstart_score":80,"quickstart_tag":"verified","pypi_latest":null,"install_checks":{"last_tested":"2026-05-12","tag":"verified","tag_description":"installs cleanly on critical runtimes, fast import, recently tested","results":[{"runtime":"python:3.10-alpine","python_version":"3.10","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.6,"disk_size":"18.1M"},{"runtime":"python:3.10-slim","python_version":"3.10","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1.6,"disk_size":"19M"},{"runtime":"python:3.11-alpine","python_version":"3.11","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":1.8,"disk_size":"20.0M"},{"runtime":"python:3.11-slim","python_version":"3.11","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":1.8,"disk_size":"21M"},{"runtime":"python:3.12-alpine","python_version":"3.12","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.04,"mem_mb":1.5,"disk_size":"11.9M"},{"runtime":"python:3.12-slim","python_version":"3.12","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.5,"disk_size":"12M"},{"runtime":"python:3.13-alpine","python_version":"3.13","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.8,"disk_size":"11.6M"},{"runtime":"python:3.13-slim","python_version":"3.13","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.6,"disk_size":"12M"},{"runtime":"python:3.9-alpine","python_version":"3.9","os_libc":"alpine (musl)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.03,"mem_mb":1.5,"disk_size":"17.6M"},{"runtime":"python:3.9-slim","python_version":"3.9","os_libc":"slim (glibc)","variant":"default","exit_code":0,"wheel_type":null,"failure_reason":null,"install_time_s":null,"import_time_s":0.02,"mem_mb":1.5,"disk_size":"18M"}]},"quickstart_checks":{"last_tested":"2026-04-23","tag":"verified","tag_description":"quickstart runs on critical runtimes, recently tested","results":[{"runtime":"python:3.10-alpine","exit_code":0},{"runtime":"python:3.10-slim","exit_code":0},{"runtime":"python:3.11-alpine","exit_code":0},{"runtime":"python:3.11-slim","exit_code":0},{"runtime":"python:3.12-alpine","exit_code":0},{"runtime":"python:3.12-slim","exit_code":0},{"runtime":"python:3.13-alpine","exit_code":0},{"runtime":"python:3.13-slim","exit_code":0},{"runtime":"python:3.9-alpine","exit_code":0},{"runtime":"python:3.9-slim","exit_code":0}]}}