types.SQLAlchemySource

SQLAlchemySource(engine, table_name)

A DataSource implementation that supports multiple SQL databases via SQLAlchemy.

Supports various databases including PostgreSQL, MySQL, SQLite, Snowflake, and Databricks.

Methods

Name Description
cleanup Dispose of the SQLAlchemy engine.
execute_query Execute SQL query and return results as DataFrame.
get_data Return the unfiltered data as a DataFrame.
get_db_type Get the database type.
get_schema Generate schema information from database table.
test_query Test query by fetching only one row.

cleanup

types.SQLAlchemySource.cleanup()

Dispose of the SQLAlchemy engine.

Returns

Name Type Description
None

execute_query

types.SQLAlchemySource.execute_query(query)

Execute SQL query and return results as DataFrame.

Uses polars if available, otherwise falls back to pandas.

Parameters

Name Type Description Default
query str SQL query to execute required

Returns

Name Type Description
nw.DataFrame Query results as narwhals DataFrame

Raises

Name Type Description
UnsafeQueryError If the query starts with a disallowed SQL operation

get_data

types.SQLAlchemySource.get_data()

Return the unfiltered data as a DataFrame.

Returns

Name Type Description
nw.DataFrame The complete dataset as a narwhals DataFrame

get_db_type

types.SQLAlchemySource.get_db_type()

Get the database type.

Returns the specific database type (e.g., POSTGRESQL, MYSQL, SQLITE) by inspecting the SQLAlchemy engine. Removes ” SQL” suffix if present.

get_schema

types.SQLAlchemySource.get_schema(categorical_threshold)

Generate schema information from database table.

Returns: String describing the schema

test_query

types.SQLAlchemySource.test_query(query, *, require_all_columns=False)

Test query by fetching only one row.

Parameters

Name Type Description Default
query str SQL query to test required
require_all_columns bool If True, validates that result includes all original table columns False

Returns

Name Type Description
nw.DataFrame Query results with at most one row

Raises

Name Type Description
UnsafeQueryError If the query starts with a disallowed SQL operation
MissingColumnsError If require_all_columns is True and result is missing required columns