summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy
diff options
context:
space:
mode:
authormike bayer <mike_mp@zzzcomputing.com>2023-03-10 21:06:28 +0000
committerGerrit Code Review <gerrit@bbpush.zzzcomputing.com>2023-03-10 21:06:28 +0000
commite7aabd54c4defe237cecfa80863f0d7fa5a48035 (patch)
treedb8e99bb10de75c58067a685cac8000446bfe335 /lib/sqlalchemy
parent7f4df1625ef06cbfda5ca2db34984fd576506fff (diff)
parentfd9aa847920b9e4dff61ef7a5555c9fa6e362484 (diff)
downloadsqlalchemy-e7aabd54c4defe237cecfa80863f0d7fa5a48035.tar.gz
Merge "Fix regression when deserializing python rows into cython" into main
Diffstat (limited to 'lib/sqlalchemy')
-rw-r--r--lib/sqlalchemy/engine/_py_row.py5
-rw-r--r--lib/sqlalchemy/testing/util.py2
2 files changed, 5 insertions, 2 deletions
diff --git a/lib/sqlalchemy/engine/_py_row.py b/lib/sqlalchemy/engine/_py_row.py
index 7cbac552f..1b952fe4c 100644
--- a/lib/sqlalchemy/engine/_py_row.py
+++ b/lib/sqlalchemy/engine/_py_row.py
@@ -24,7 +24,7 @@ if typing.TYPE_CHECKING:
MD_INDEX = 0 # integer index in cursor.description
-class _KeyStyle(enum.Enum):
+class _KeyStyle(enum.IntEnum):
KEY_INTEGER_ONLY = 0
"""__getitem__ only allows integer values and slices, raises TypeError
otherwise"""
@@ -121,6 +121,9 @@ class BaseRow:
mdindex = rec[MD_INDEX]
if mdindex is None:
self._parent._raise_for_ambiguous_column_name(rec)
+ # NOTE: keep "== KEY_OBJECTS_ONLY" instead of "is KEY_OBJECTS_ONLY"
+ # since deserializing the class from cython will load an int in
+ # _key_style, not an instance of _KeyStyle
elif self._key_style == KEY_OBJECTS_ONLY and isinstance(key, int):
raise KeyError(key)
diff --git a/lib/sqlalchemy/testing/util.py b/lib/sqlalchemy/testing/util.py
index 153ce4d0a..d061f26a2 100644
--- a/lib/sqlalchemy/testing/util.py
+++ b/lib/sqlalchemy/testing/util.py
@@ -59,7 +59,7 @@ def picklers():
# yes, this thing needs this much testing
for pickle_ in picklers:
- for protocol in range(-2, pickle.HIGHEST_PROTOCOL):
+ for protocol in range(-2, pickle.HIGHEST_PROTOCOL + 1):
yield pickle_.loads, lambda d: pickle_.dumps(d, protocol)