diff --git a/sqlalchemy_bigquery/__init__.py b/sqlalchemy_bigquery/__init__.py index 1e506125..5e05cbdb 100644 --- a/sqlalchemy_bigquery/__init__.py +++ b/sqlalchemy_bigquery/__init__.py @@ -43,6 +43,7 @@ STRUCT, TIME, TIMESTAMP, + JSON, ) from . import _versions_helpers @@ -80,6 +81,7 @@ "STRUCT", "TIME", "TIMESTAMP", + "JSON", ] try: diff --git a/sqlalchemy_bigquery/_types.py b/sqlalchemy_bigquery/_types.py index 8399e978..7fdd1fa3 100644 --- a/sqlalchemy_bigquery/_types.py +++ b/sqlalchemy_bigquery/_types.py @@ -47,6 +47,7 @@ "STRUCT": STRUCT, "TIMESTAMP": sqlalchemy.types.TIMESTAMP, "TIME": sqlalchemy.types.TIME, + "JSON": sqlalchemy.types.JSON, } # By convention, dialect-provided types are spelled with all upper case. @@ -66,6 +67,7 @@ STRING = _type_map["STRING"] TIMESTAMP = _type_map["TIMESTAMP"] TIME = _type_map["TIME"] +JSON = _type_map["JSON"] try: _type_map["GEOGRAPHY"] = GEOGRAPHY diff --git a/sqlalchemy_bigquery/base.py b/sqlalchemy_bigquery/base.py index c36ca1b1..3c74d41e 100644 --- a/sqlalchemy_bigquery/base.py +++ b/sqlalchemy_bigquery/base.py @@ -641,6 +641,9 @@ def visit_NUMERIC(self, type_, **kw): visit_DECIMAL = visit_NUMERIC + def visit_JSON(self, type_, **kw): + return "JSON" + class BigQueryDDLCompiler(DDLCompiler): option_datatype_mapping = {