diff --git a/contrib/starrocks-python-client/starrocks/dialect.py b/contrib/starrocks-python-client/starrocks/dialect.py index 7c296eff7c1..1fda89b569c 100644 --- a/contrib/starrocks-python-client/starrocks/dialect.py +++ b/contrib/starrocks-python-client/starrocks/dialect.py @@ -15,6 +15,7 @@ import re from textwrap import dedent import time +from typing import Union from sqlalchemy import Connection, exc, schema as sa_schema from sqlalchemy.dialects.mysql.pymysql import MySQLDialect_pymysql @@ -423,7 +424,7 @@ class StarRocksDialect(MySQLDialect_pymysql): return _reflection.StarRocksTableDefinitionParser(self, preparer) def _read_from_information_schema( - self, connection: Connection, inf_sch_table: str, charset: str | None = None, **kwargs + self, connection: Connection, inf_sch_table: str, charset: Union[str, None] = None, **kwargs ): def escape_single_quote(s): return s.replace("'", "\\'") @@ -449,7 +450,7 @@ class StarRocksDialect(MySQLDialect_pymysql): return rows @reflection.cache - def _setup_parser(self, connection: Connection, table_name: str, schema: str | None = None, **kw): + def _setup_parser(self, connection: Connection, table_name: str, schema: Union[str, None] = None, **kw): charset = self._connection_charset parser = self._tabledef_parser diff --git a/contrib/starrocks-python-client/starrocks/reflection.py b/contrib/starrocks-python-client/starrocks/reflection.py index e26fb9c443d..14e21c79061 100644 --- a/contrib/starrocks-python-client/starrocks/reflection.py +++ b/contrib/starrocks-python-client/starrocks/reflection.py @@ -16,7 +16,7 @@ import dataclasses import json import re -from typing import Any +from typing import Any, Union from sqlalchemy.dialects.mysql.types import DATETIME from sqlalchemy.dialects.mysql.types import TIME @@ -27,12 +27,13 @@ from sqlalchemy import log from sqlalchemy import types as sqltypes from sqlalchemy import util - -@dataclasses.dataclass(kw_only=True) +# kw_only is added in python 3.10 +# https://docs.python.org/3/library/dataclasses.html#dataclasses.dataclass +@dataclasses.dataclass(**dict(kw_only=True) if 'KW_ONLY' in dataclasses.__all__ else {}) class ReflectedState(object): """Stores informations about table or view.""" - table_name: str | None = None + table_name: Union[str, None] = None columns: list[dict] = dataclasses.field(default_factory=list) table_options: dict[str, str] = dataclasses.field(default_factory=dict) keys: list[dict] = dataclasses.field(default_factory=list)