def _key_fallback(self, key, raiseerr=True):
     map = self._keymap
     result = None
     if isinstance(key, str):
         result = map.get(key)
     # fallback for targeting a ColumnElement to a textual expression
     # this is a rare use case which only occurs when matching text()
     # or colummn('name') constructs to ColumnElements, or after a
     # pickle/unpickle roundtrip
     elif isinstance(key, expression.ColumnElement):
         if (key._label and key._label in map):
             result = map[key._label]
         elif (hasattr(key, 'name') and key.name in map):
             # match is only on name.
             result = map[key.name]
         # search extra hard to make sure this
         # isn't a column/label name overlap.
         # this check isn't currently available if the row
         # was unpickled.
         if (result is not None and result[1] is not None):
             for obj in result[1]:
                 if key._compare_name_for_result(obj):
                     break
             else:
                 result = None
     if result is None:
         if raiseerr:
             raise exc.NoSuchColumnError(
                 "Could not locate column in row for column '%s'" %
                 expression._string_or_unprintable(key))
         else:
             return None
     else:
         map[key] = result
     return result
예제 #2
0
파일: result.py 프로젝트: AeroNotix/aiopg
 def _key_fallback(self, key, raiseerr=True):
     map = self._keymap
     result = None
     if isinstance(key, str):
         result = map.get(key)
     # fallback for targeting a ColumnElement to a textual expression
     # this is a rare use case which only occurs when matching text()
     # or colummn('name') constructs to ColumnElements, or after a
     # pickle/unpickle roundtrip
     elif isinstance(key, expression.ColumnElement):
         if (key._label and key._label in map):
             result = map[key._label]
         elif (hasattr(key, 'name') and key.name in map):
             # match is only on name.
             result = map[key.name]
         # search extra hard to make sure this
         # isn't a column/label name overlap.
         # this check isn't currently available if the row
         # was unpickled.
         if (result is not None and
                 result[1] is not None):
             for obj in result[1]:
                 if key._compare_name_for_result(obj):
                     break
             else:
                 result = None
     if result is None:
         if raiseerr:
             raise exc.NoSuchColumnError(
                 "Could not locate column in row for column '%s'" %
                 expression._string_or_unprintable(key))
         else:
             return None
     else:
         map[key] = result
     return result