{"id":1723,"library":"sql-metadata","title":"SQL Metadata","description":"sql-metadata is a Python library that parses SQL queries to extract metadata such as table names, column names, query type (e.g., SELECT, INSERT, UPDATE, DELETE), and more. It leverages the tokenized query output from the `sqlparse` library. The current version is 2.20.0, and it maintains an active release cadence, often releasing minor versions to improve parsing accuracy and update its `sqlparse` dependency.","status":"active","version":"2.20.0","language":"en","source_language":"en","source_url":"https://github.com/macbre/sql-metadata","tags":["sql","parsing","metadata","database","analysis","query"],"install":[{"cmd":"pip install sql-metadata","lang":"bash","label":"Install stable version"}],"dependencies":[{"reason":"Core dependency for SQL tokenization and parsing. sql-metadata builds on its output.","package":"sqlparse"}],"imports":[{"symbol":"Parser","correct":"from sql_metadata.parser import Parser"}],"quickstart":{"code":"from sql_metadata.parser import Parser\n\nsql_query = \"SELECT id, name, email FROM users WHERE status = 'active' ORDER BY name;\"\nparser = Parser(sql_query)\n\nprint(f\"Tables: {parser.tables}\")\nprint(f\"Columns: {parser.columns}\")\nprint(f\"Query Type: {parser.query_type}\")\nprint(f\"Limit: {parser.limit}\")\nprint(f\"Group by: {parser.group_by}\")","lang":"python","description":"Initialize a Parser object with a SQL string to extract various metadata attributes."},"warnings":[{"fix":"Upgrade Python to 3.9 or newer, or downgrade sql-metadata to <2.16.0.","message":"Support for Python 3.8 was dropped in version 2.16.0. Users on Python 3.8 will need to upgrade their Python environment or pin sql-metadata to a version prior to 2.16.0.","severity":"breaking","affected_versions":">=2.16.0"},{"fix":"If 'source' is expected as the last column, verify results on v2.20.0. Consider restructuring the query or inspecting `parser.tokens` directly for more granular control if this specific edge case causes issues.","message":"The `Parser.columns` method in version 2.20.0 contains a fix that causes a column named `source` to be dropped if it is the last column in a `SELECT` statement. This change in behavior might affect applications relying on specific column outputs for such edge cases.","severity":"gotcha","affected_versions":"2.20.0"},{"fix":"Ensure you are using the latest version of `sql-metadata` to benefit from the most recent parsing improvements and bug fixes, especially for complex or less common SQL constructs.","message":"Parsing accuracy for specific SQL dialects and complex constructs (e.g., `ALTER TABLE ... ADD KEY`, MSSQL unqualified schema tables, `TRUNCATE TABLE`, Hive `CREATE FUNCTION`) has been incrementally improved across minor versions (e.g., v2.13.0, v2.14.0, v2.17.0, v2.12.0). Users on older versions might experience incorrect or incomplete metadata extraction for such queries.","severity":"gotcha","affected_versions":"<2.20.0"},{"fix":"When `sql-metadata` updates its `sqlparse` dependency (often noted in release logs), review `sqlparse`'s changelog for any potential regressions or behavior changes that might affect your SQL parsing.","message":"The library's parsing capabilities are highly dependent on the underlying `sqlparse` library. While `sql-metadata` manages its `sqlparse` dependency, breaking changes or parsing quirks in `sqlparse` can indirectly affect `sql-metadata`'s behavior and accuracy. Always check `sqlparse` release notes if `sql-metadata` updates its `sqlparse` dependency.","severity":"gotcha","affected_versions":"All versions"}],"env_vars":null,"last_verified":"2026-04-09T00:00:00.000Z","next_check":"2026-07-08T00:00:00.000Z"}