From 6cd1e0663d635f700415cd9c68fd13826e92ba75 Mon Sep 17 00:00:00 2001 From: Walt Askew Date: Mon, 20 Apr 2026 20:17:35 +0000 Subject: [PATCH] fix: Support Creation of JSON columns Fixes #15761 --- .../sqlalchemy-bigquery/sqlalchemy_bigquery/base.py | 3 +++ .../tests/unit/test_table_options.py | 12 ++++++++++++ 2 files changed, 15 insertions(+) diff --git a/packages/sqlalchemy-bigquery/sqlalchemy_bigquery/base.py b/packages/sqlalchemy-bigquery/sqlalchemy_bigquery/base.py index a52b494c3c11..2b6336318267 100644 --- a/packages/sqlalchemy-bigquery/sqlalchemy_bigquery/base.py +++ b/packages/sqlalchemy-bigquery/sqlalchemy_bigquery/base.py @@ -622,6 +622,9 @@ def visit_BINARY(self, type_, **kw): visit_VARBINARY = visit_BLOB = visit_BINARY + def visit_JSON(self, type_, **kw): + return "JSON" + def visit_NUMERIC(self, type_, **kw): if (type_.precision is not None) and isinstance( kw.get("type_expression"), Column diff --git a/packages/sqlalchemy-bigquery/tests/unit/test_table_options.py b/packages/sqlalchemy-bigquery/tests/unit/test_table_options.py index 496ebedd0642..cbdf51e347a5 100644 --- a/packages/sqlalchemy-bigquery/tests/unit/test_table_options.py +++ b/packages/sqlalchemy-bigquery/tests/unit/test_table_options.py @@ -62,6 +62,18 @@ def test_table_default_rounding_mode_dialect_option(faux_conn): ) +def test_table_with_json_columns(faux_conn): + setup_table( + faux_conn, + "some_table", + sqlalchemy.Column("some_stuff", sqlalchemy.JSON), + ) + + assert " ".join(faux_conn.test_data["execute"][-1][0].strip().split()) == ( + "CREATE TABLE `some_table` ( `some_stuff` JSON )" + ) + + def test_table_clustering_fields_dialect_option_no_such_column(faux_conn): with pytest.raises(sqlalchemy.exc.NoSuchColumnError): setup_table(