{"id":24646,"library":"sqlframe","title":"SQLFrame","description":"SQLFrame is a Python library that translates PySpark DataFrame API calls into SQL queries for multiple database engines (BigQuery, DuckDB, Postgres, Snowflake, Spark, etc.). Version 4.1.0 requires Python >=3.10 and uses sqlglot for SQL generation. Release cadence is approximately bi-weekly.","status":"active","version":"4.1.0","language":"python","source_language":"en","source_url":"https://github.com/eakmanrq/sqlframe","tags":["pyspark","sql","dataframe","sqlglot","bigquery","duckdb","snowflake","postgres","spark"],"install":[{"cmd":"pip install sqlframe","lang":"bash","label":"Core installation"},{"cmd":"pip install sqlframe[bigquery]","lang":"bash","label":"With BigQuery support"},{"cmd":"pip install sqlframe[duckdb]","lang":"bash","label":"With DuckDB support"},{"cmd":"pip install sqlframe[snowflake]","lang":"bash","label":"With Snowflake support"},{"cmd":"pip install sqlframe[postgres]","lang":"bash","label":"With Postgres support"},{"cmd":"pip install sqlframe[spark]","lang":"bash","label":"With Spark support"}],"dependencies":[{"reason":"SQL generation engine","package":"sqlglot","optional":false},{"reason":"Required for DuckDB engine","package":"duckdb","optional":true},{"reason":"Required for Snowflake engine","package":"snowflake-connector-python","optional":true},{"reason":"Required for Postgres engine","package":"psycopg2-binary","optional":true},{"reason":"Required for BigQuery engine","package":"google-cloud-bigquery","optional":true},{"reason":"Required for Spark engine","package":"pyspark","optional":true}],"imports":[{"wrong":"from sqlframe import Session","symbol":"Session","correct":"from sqlframe import Session"}],"quickstart":{"code":"import os\nfrom sqlframe import Session\n\n# Create a session for DuckDB (no external DB needed)\nengine = \"duckdb\"\nos.environ[\"SQLFRAME_ENGINE\"] = engine  # optional\nsession = Session.builder.config(\"extension\", engine).getOrCreate()\n\n# Create a DataFrame from a list of tuples\ndf = session.createDataFrame([(1, \"Alice\"), (2, \"Bob\")], schema=[\"id\", \"name\"])\ndf.show()\n\n# Apply transformations\ndf_filtered = df.filter(df.name == \"Alice\").select(df.id)\nprint(df_filtered.sql())  # print generated SQL\n","lang":"python","description":"Quickstart using DuckDB engine (no external database needed). Set up a session, create a DataFrame, apply filters, and inspect generated SQL."},"warnings":[{"fix":"Upgrade to 4.0.0+ and use Session.builder.config(\"extension\", \"duckdb\") (or other engine).","message":"In version 4.0.0, the engine configuration changed. Previously you might have set an environment variable or used a different builder pattern. Now use Session.builder.config(\"extension\", \"engine_name\").getOrCreate(). The old pattern with spark = SQLFrame(engine='duckdb') is removed.","severity":"breaking","affected_versions":"<4.0.0"},{"fix":"Use .show() to preview results, .collect() to get a list of Row objects, or .toPandas() to get a Pandas DataFrame.","message":"SQLFrame does not execute queries by default. Use .show() or .collect() to actually run the query against the engine. Calling .sql() only returns the generated SQL string.","severity":"gotcha","affected_versions":"all"},{"fix":"Change imports to from sqlframe import DataFrame, Session, functions as F.","message":"The old import path from sqlframe.sql import DataFrame is deprecated as of version 4.0.0. Use from sqlframe import DataFrame instead.","severity":"deprecated","affected_versions":">=4.0.0"},{"fix":"Create one session per engine: session_duckdb = Session.builder.config(\"extension\", \"duckdb\").getOrCreate() and session_bq = Session.builder.config(\"extension\", \"bigquery\").getOrCreate().","message":"When using multiple engines in the same project, you must create a separate Session for each engine. Sharing sessions across different engine types will lead to errors.","severity":"gotcha","affected_versions":"all"}],"env_vars":null,"search_vec":"'3.10':30 '4.1.0':27 'api':11 'approxim':40 'bi':42 'bi-week':41 'bigqueri':20,48 'cadenc':38 'call':12 'databas':18 'datafram':10,46 'duckdb':21,49 'engin':19 'etc':25 'generat':36 'librari':6 'multipl':17 'postgr':22,51 'pyspark':9,44 'python':5,29 'queri':15 'releas':37 'requir':28 'snowflak':23,50 'spark':24,52 'sql':14,35,45 'sqlframe':1,2 'sqlglot':33,47 'translat':8 'use':32 'version':26 'week':43","created_at":"2026-05-01T08:14:11.318487+00:00","updated_at":"2026-05-01T08:14:11.318487+00:00","problems":{"verify_error":"Traceback (most recent call last):\n  File \"<string>\", line 1, in <module>\nImportError: cannot import name 'Session' from 'sqlframe' (/tmp/tmpdimnbrsl/venv/lib/python3.12/site-packages/sqlframe/__init__.py)"},"ecosystem":"pypi","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":"4.3.0","cli_name":"","cli_version":null,"type":"library","homepage":"https://sqlframe.readthedocs.io","github":"https://github.com/eakmanrq/sqlframe","docs":null,"changelog":null,"pypi":"https://pypi.org/project/sqlframe/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null,"categories":["data","database"],"base_url":null,"auth_type":null,"provenance":{"verified_status":"import_fail","verified_at":"2026-07-03","last_verified":"2026-07-03","next_check":"2026-07-10","install_tag":null}}