-
Notifications
You must be signed in to change notification settings - Fork 4
Open
Description
Environment
- Python version: 3.11.14
- SQLAlchemy version: 2.0.44
- SQLModel version: 0.0.27
- pydynamodb version: 0.7.5
Description
Calling session.get(Table, "<pk>") results in a NoSuchColumnError when loading item by primary key.
Minimal Reproducible Example
import uuid
from pydynamodb import sqlalchemy_dynamodb
from sqlalchemy.engine import create_engine
from sqlmodel import Session, Field, SQLModel
import boto3
class Team(SQLModel, table=True):
id: str = Field(default_factory=lambda: uuid.uuid4().hex, primary_key=True)
name: str = Field(index=True)
headquarters: str
session = boto3.Session()
client = session.client("dynamodb")
credentials = session.get_credentials()
aws_access_key_id = credentials.access_key
aws_secret_access_key = credentials.secret_key
region_name = session.region_name
conn_str = (
"dynamodb://{aws_access_key_id}:{aws_secret_access_key}@dynamodb.{region_name}.amazonaws.com:443"
).format(
aws_access_key_id=aws_access_key_id,
aws_secret_access_key=aws_secret_access_key,
region_name=region_name,
)
engine = create_engine(conn_str, echo=True)
with Session(engine) as session:
results = session.get(Team, "some-id")
print(results)Observed Behavior
session.get() triggers a fatal NoSuchColumnError:
2025-11-17 18:59:27,674 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2025-11-17 18:59:27,675 INFO sqlalchemy.engine.Engine SELECT id, name, headquarters
FROM team
WHERE id = ?
2025-11-17 18:59:27,675 INFO sqlalchemy.engine.Engine [generated in 0.00011s] ('some-id',)
2025-11-17 18:59:28,050 INFO sqlalchemy.engine.Engine ROLLBACK
Traceback (most recent call last):
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlalchemy/engine/cursor.py", line 859, in _indexes_for_keys
return [self._keymap[key][0] for key in keys]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlalchemy/engine/cursor.py", line 859, in <listcomp>
return [self._keymap[key][0] for key in keys]
~~~~~~~~~~~~^^^^^
KeyError: Column('id', AutoString(), table=<team>, primary_key=True, nullable=False, default=CallableColumnDefault(<function Team.<lambda> at 0x77df6c97a160>))
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/tmp/test/main.py", line 33, in <module>
results = session.get(Team, "some-id")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 3680, in get
return self._get_impl(
^^^^^^^^^^^^^^^
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 3859, in _get_impl
return db_load_fn(
^^^^^^^^^^^
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlalchemy/orm/loading.py", line 695, in load_on_pk_identity
session.execute(
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlmodel/orm/session.py", line 144, in execute
return super().execute(
^^^^^^^^^^^^^^^^
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 2351, in execute
return self._execute_internal(
^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlalchemy/orm/session.py", line 2249, in _execute_internal
result: Result[Any] = compile_state_cls.orm_execute_statement(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlalchemy/orm/context.py", line 309, in orm_execute_statement
return cls.orm_setup_cursor_result(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlalchemy/orm/context.py", line 616, in orm_setup_cursor_result
return loading.instances(result, querycontext)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlalchemy/orm/loading.py", line 133, in instances
with util.safe_reraise():
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlalchemy/util/langhelpers.py", line 224, in __exit__
raise exc_value.with_traceback(exc_tb)
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlalchemy/orm/loading.py", line 114, in instances
*[
^
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlalchemy/orm/loading.py", line 115, in <listcomp>
query_entity.row_processor(context, cursor)
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlalchemy/orm/context.py", line 2786, in row_processor
_instance = loading._instance_processor(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlalchemy/orm/loading.py", line 878, in _instance_processor
primary_key_getter = result._tuple_getter(pk_cols)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 1189, in _tuple_getter
return self._metadata._row_as_tuple_getter(keys)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlalchemy/engine/result.py", line 179, in _row_as_tuple_getter
indexes = self._indexes_for_keys(keys)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlalchemy/engine/cursor.py", line 862, in _indexes_for_keys
CursorResultMetaData._key_fallback(self, ke.args[0], ke)
File "/home/user/miniconda3/envs/test/lib/python3.11/site-packages/sqlalchemy/engine/cursor.py", line 825, in _key_fallback
raise exc.NoSuchColumnError(
sqlalchemy.exc.NoSuchColumnError: Could not locate column in row for column 'team.id'
Expected Behavior
session.get() should return an instance of model or None.
acanadil
Metadata
Metadata
Assignees
Labels
No labels