Skip to content

Commit dbbe2ab

Browse files
committed
bug: handle SQLAlchemy connection deprecation
1 parent 170379f commit dbbe2ab

File tree

1 file changed

+18
-14
lines changed

1 file changed

+18
-14
lines changed

google/cloud/sqlalchemy_spanner/sqlalchemy_spanner.py

Lines changed: 18 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,8 @@
1212
# See the License for the specific language governing permissions and
1313
# limitations under the License.
1414
import base64
15-
1615
import re
17-
16+
import sqlalchemy
1817
from alembic.ddl.base import (
1918
ColumnNullable,
2019
ColumnType,
@@ -25,14 +24,16 @@
2524
from google.api_core.client_options import ClientOptions
2625
from google.auth.credentials import AnonymousCredentials
2726
from google.cloud.spanner_v1 import Client, TransactionOptions
28-
from sqlalchemy.exc import NoSuchTableError
29-
from sqlalchemy.sql import elements
27+
from google.cloud.spanner_v1.data_types import JsonObject
3028
from sqlalchemy import ForeignKeyConstraint, types, TypeDecorator, PickleType
3129
from sqlalchemy.engine.base import Engine
3230
from sqlalchemy.engine.default import DefaultDialect, DefaultExecutionContext
3331
from sqlalchemy.event import listens_for
32+
from sqlalchemy.exc import NoSuchTableError
3433
from sqlalchemy.ext.compiler import compiles
3534
from sqlalchemy.pool import Pool
35+
from sqlalchemy.sql import elements
36+
from sqlalchemy.sql import expression
3637
from sqlalchemy.sql.compiler import (
3738
selectable,
3839
DDLCompiler,
@@ -44,13 +45,10 @@
4445
)
4546
from sqlalchemy.sql.default_comparator import operator_lookup
4647
from sqlalchemy.sql.operators import json_getitem_op
47-
from sqlalchemy.sql import expression
4848

49-
from google.cloud.spanner_v1.data_types import JsonObject
5049
from google.cloud import spanner_dbapi
51-
from google.cloud.sqlalchemy_spanner._opentelemetry_tracing import trace_call
5250
from google.cloud.sqlalchemy_spanner import version as sqlalchemy_spanner_version
53-
import sqlalchemy
51+
from google.cloud.sqlalchemy_spanner._opentelemetry_tracing import trace_call
5452

5553
USING_SQLACLCHEMY_20 = False
5654
if sqlalchemy.__version__.split(".")[0] == "2":
@@ -63,12 +61,18 @@
6361
@listens_for(Pool, "reset")
6462
def reset_connection(dbapi_conn, connection_record, reset_state=None):
6563
"""An event of returning a connection back to a pool."""
64+
if hasattr(dbapi_conn, "driver_connection"):
65+
dbapi_conn = dbapi_conn.driver_connection
6666
if hasattr(dbapi_conn, "connection"):
6767
dbapi_conn = dbapi_conn.connection
6868
if isinstance(dbapi_conn, spanner_dbapi.Connection):
69-
if dbapi_conn.inside_transaction:
69+
transaction_started = getattr(
70+
dbapi_conn,
71+
"spanner_transaction_started",
72+
getattr(dbapi_conn, "inside_transaction", False),
73+
)
74+
if transaction_started:
7075
dbapi_conn.rollback()
71-
7276
dbapi_conn.staleness = None
7377
dbapi_conn.read_only = False
7478

@@ -1709,7 +1713,7 @@ def set_isolation_level(self, conn_proxy, level):
17091713
conn_proxy (
17101714
Union[
17111715
sqlalchemy.pool._ConnectionFairy,
1712-
spanner_dbapi.connection.Connection,
1716+
spanner_dbapi.driver_connection.Connection,
17131717
]
17141718
):
17151719
Database connection proxy object or the connection itself.
@@ -1718,7 +1722,7 @@ def set_isolation_level(self, conn_proxy, level):
17181722
if isinstance(conn_proxy, spanner_dbapi.Connection):
17191723
conn = conn_proxy
17201724
else:
1721-
conn = conn_proxy.connection
1725+
conn = conn_proxy.driver_connection
17221726

17231727
if level == "AUTOCOMMIT":
17241728
conn.autocommit = True
@@ -1735,7 +1739,7 @@ def get_isolation_level(self, conn_proxy):
17351739
conn_proxy (
17361740
Union[
17371741
sqlalchemy.pool._ConnectionFairy,
1738-
spanner_dbapi.connection.Connection,
1742+
spanner_dbapi.driver_connection.Connection,
17391743
]
17401744
):
17411745
Database connection proxy object or the connection itself.
@@ -1746,7 +1750,7 @@ def get_isolation_level(self, conn_proxy):
17461750
if isinstance(conn_proxy, spanner_dbapi.Connection):
17471751
conn = conn_proxy
17481752
else:
1749-
conn = conn_proxy.connection
1753+
conn = conn_proxy.driver_connection
17501754

17511755
if conn.autocommit:
17521756
return "AUTOCOMMIT"

0 commit comments

Comments
 (0)